Реализация JSON_FLOAT_AS_STRING для json_decode
Когда вы имеете дело с финансами, очень важно не потерять точность при декодировании json строки с помощью json_decode()
. Единственное обходное решение, - это использовать preg_replace
для добавления кавычек в исходную строку JSON. Данный метод Json::float_safe($string)
позволяет это сделать.
- Не изменяет структуру самого JSON (пробелы, переносы...)
- Обрамляет кавычками экспоненциальный формат числа
- Работает достаточно быстро
composer require alglyzin/json
<?php
use alglyzin\Json\Json;
$json = ' {
"a": 0.00000001e23,
"b": 0.00000001,
"c": 10000000000.0e+45,
"d": 0.00000001e-3,
"e": 10.0E4,
"f": 1000000000.0E-34,
"g": 0.000000000000001,
"h": 100000
}';
$json = Json::float_safe($json);
echo $json;
// echo $json:
// {
// "a": "0.00000001e23",
// "b": "0.00000001",
// "c": "10000000000.0e+45",
// "d": "0.00000001e-3",
// "e": "10.0E4",
// "f": "1000000000.0E-34",
// "g": "0.000000000000001",
// "h": 100000
// }