首先看看以下代码:
代码1:
<?php $a=0.1; $b=0.7; if($a+$b==0.8) { echo "1"; } else{ echo "2"; } ?>
代码2:
<?php $f = 0.58; var_dump(intval($f * 100)); //为啥输出57 ?>
以上问题引用鸟哥的话就是"你看似有穷的小数, 在计算机的二进制表示里却是无穷的".
但是这都不要紧,因为php还提供了高精度函数库。
解决代码1:
<?php $a=0.1; $b=0.7; if(bcadd($a,$b,1)==0.8) { echo "1"; } else{ echo "2"; } ?>
解决代码2:
<?php $f = 0.58; var_dump(bcadd($f * 100,0,0)); ?>
其实在其他语言中也是存在的,例如以下c#
static void Main(string[] args) { double a = 0.1; double b = 0.7; if (a+b==0.8) { Console.WriteLine("ok"); } else { Console.WriteLine("failed!"); } Console.ReadKey(); }