Десятичная точка с плавающей запятой в 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

Другие вопросы по тегам