PHP代码
- <?php
- $a = 8.45*100;
- var_dump($a);
- var_dump(intval($a));
- $a = 845*1.00;
- var_dump($a);
- var_dump(intval($a));
- ?>
这段程序,我以为输入4个都是845。不过结果出乎意料。php 5.29输入的结果是
float(845)
int(844)
float(845)
int(845)
为什么两个都是845的浮点数,转整时一个事845一个是844?php手册上的说法是:
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。
不过仍然很费解
PHP代码
- <?php
- var_dump(floor((0.1+0.7)*10));
- var_dump(floor((0.1+0.6)*10));
- ?>
两个都是 float(7)。
所以遇到php浮点数,特别是要对两数相比较是要注意这个问题。