首先看看以下代码:
代码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();
}