1

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

我循环了一些交易借方/贷方,余额为 0 但是最后当我尝试比较为零时,它不适用于 == 0 和 === 0

经过几次调试,我发现:

<?php
var_dump(1097.5 - 835.7);

返回浮点数(261.79999999999995)

PHP 7 中的同一行返回 float(261.8)

这可以很容易地使用这个沙箱进行测试

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

4

1 回答 1

2

PHP 8.0升级说明

var_dump() 和 debug_zval_dump() 现在将使用 serialize_precision 而不是精度来打印浮点数。在默认配置中,这意味着这些调试功能现在可以完全准确地打印浮点数。

所以你可以改变这个

ini_set('serialize_precision', 16);

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

但是,我怀疑这是您真正的问题!由于此更改仅影响“这些调试功能”以及序列化功能,例如serializejson_encode

于 2021-11-06T01:36:48.957 回答