Десятичная точка с плавающей запятой в PHP 8 отличается от PHP 7
Я обновил некоторые бухгалтерские скрипты до PHP 8.1, но получаю неправильные числа с плавающей запятой.
Я зацикливаю несколько дебетовых / кредитных транзакций, и баланс равен 0, однако в конце, когда я пытаюсь сравнить с нулем, он не работает с == 0 и === 0
После небольшой отладки я обнаружил:
<?php
var_dump(1097.5 - 835.7);
возвращает float(261.79999999999995)
И та же строка в PHP 7 возвращает float (261,8).
Это легко проверить с помощью этой песочницы.
Поэтому мне было интересно, есть ли какие-то настройки, которые я могу изменить в своих конфигурациях PHP, чтобы убедиться, что я получаю те же плавающие результаты, что и раньше, без необходимости повторять на каждом этапе в сотнях скриптов?
1 ответ
ЗАМЕЧАНИЯ ПО ОБНОВЛЕНИЮ PHP 8.0 :
var_dump () и debug_zval_dump () теперь будут печатать числа с плавающей запятой, используя serialize_precision, а не точность. В конфигурации по умолчанию это означает, что числа с плавающей запятой теперь печатаются с полной точностью этими функциями отладки.
Так что вы можете изменить это
ini_set('serialize_precision', 16);
https://3v4l.org/uOAPD#v8.1rc3
Однако я сомневаюсь, что это ваша настоящая проблема! поскольку это изменение затрагивает только «эти функции отладки», а также функции серлизации, такие как
serialize
,
json_encode