Столкнулся с интересной особенностью json_encode

886
Алексей,

Вместо "1.7", мне сервер выдал "1.7000000000000002". Проблема не только с json_encode, но и другими "serialize" функциями.

Вместо "1.7", мне сервер выдал "1.7000000000000002". Проблема не только с json_encode, но и другими "serialize" функциями, которые выводят числа с плавающей запятой (float, десятичные числа например). Дело в параметре PHP serialize_precision, начиная с версии 7.1

Мне помогло изменение значения с "-1" на "14"

Код для проверки

$ar = [
	96 => 0.5,
	97 => 0.4,
	98 => 0,
	99 => 0.8,
	100 => 0,
	101 => 0,
	102 => 0,
	103 => 0,
	104 => 0,
];
$sum = array_sum($ar);

echo $sum.'<br />'; // 1.7
echo json_encode($sum); // 1.7000000000000002

А если изменить параметр precision в php.ini, то можно "сломать" и обычный вывод float числа :)

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 25 января 2022
php7, баг, разработчику
Поделиться
Похожие статьи
Замена функций в коде на мультибайтовые аналоги (mb_)
В php 7.2 ini-настройка mbstring.func_overload объявлена устаревшей. К тому же битрикс решил её выкл...
Читать дальше » 0
Алексей,
Будьте внимательны при проверках $var == 'Y'
В Битрикс проверки на строковую "Y" очень популярны, т.к. сами разработчики ядра использую...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Вместо "1.7", мне сервер выдал "1.7000000000000002". Проблема не только с json_encode, но и другими "serialize" функциями.