提问者:小点点

不正确的PHP计算


有人能解释一下为什么在PHP中会发生这种情况:

echo (0.29*100)%100  // result 28

这可能很简单,但逻辑上我看不到任何解释。可能是PHP在后台的工作原理。

当我遇到这个情况时,我正试图得到一个数字的前两个小数位。结果自然应该是29。

如果我对乘法进行四舍五入,结果很好:

echo (round(0.29*100))%100  // result 29

共1个答案

匿名用户

如果你运行那个代码

echo (0.29*100)%100;

在PHP8中。1.1错误消息为您提供了线索

PHP 8.1.1
已弃用:从浮点28.999999999999996到int的隐式转换在第14行的D:\PHP-SOURCE\测试\tst.php中失去精度
Call Stack:0.0001 393688 1.{main}()D:\PHP-SOURCE\测试\<--phd--1/>: 0
28