有人能解释一下为什么在PHP中会发生这种情况:
echo (0.29*100)%100 // result 28
这可能很简单,但逻辑上我看不到任何解释。可能是PHP在后台的工作原理。
当我遇到这个情况时,我正试图得到一个数字的前两个小数位。结果自然应该是29。
如果我对乘法进行四舍五入,结果很好:
echo (round(0.29*100))%100 // result 29
如果你运行那个代码
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