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

193
Алексей,

Вместо "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, баг, разработчику
Поделиться
Комментарии
Авторизуйтесь чтобы получать уведомления об ответе
Вместо "1.7", мне сервер выдал "1.7000000000000002". Проблема не только с json_encode, но и другими "serialize" функциями.