PHP 8 浮点数不同于 PHP 7

PHP 8 float decimal point different than PHP 7

我将一些会计脚本升级到 PHP 8.1,但是我得到的浮点数不正确。

我循环了一些交易 debit/credit 并且余额为 0 但是最后当我尝试比较零时它不适用于 == 0 和 === 0

经过几次调试发现:

<?php
var_dump(1097.5 - 835.7);

returns浮动(261.79999999999995)

与 PHP 中的同一行 7 returns 浮动(261.8)

这可以很容易地使用这个 sandbox

进行测试

所以我想知道是否可以在我的 PHP 配置中更改任何设置,以确保我获得与之前相同的浮动结果,而不必在数百个脚本的每个阶段都进行汇总?

PHP 8.0 UPGRADE NOTES:

var_dump() and debug_zval_dump() will now print floating-point numbers using serialize_precision rather than precision. In a default configuration, this means that floating-point numbers are now printed with full accuracy by these debugging functions.

所以你可以改变这个

ini_set('serialize_precision', 16);

https://3v4l.org/uOAPD#v8.1rc3

但是,我怀疑这不是你真正的问题!因为此更改仅影响“这些调试功能”以及 serializejson_encode

等序列化功能