1.问题
现有5个变量,分别为a,b,c,d,e;其中a,b,c,e是从数据库取出来的,数据库字段类型为
dicimal(10,2)
,d为a,b,c之和并且为0.01,e值为0.01,用if判断d>e
,结果为true
,令人匪夷所思
2.分析
自己简单测试了一下,直接赋值相加后的值是false,唯独从数据库里取出来的值相加就是true
<?php
$a = 0.002;
$b = 0.003;
$c = 0.005;
$d = 0.01;
$e= $a+$b+$c;
if($e>$d)
{
echo 1;
}else{
echo 2;
}
// 结果 2
3.解决
只需要把a,b,c分别乘以1000(也可以用100,我自己用的是1000),计算完之后再把结果除以对应的数目即可解决,这个方法基本可以解决大部分php浮点数计算偏差问题