php浮点数运算出错问题
x.99这类的如4.99,9.99基本上都会出错,不仅仅是php,python也是存在的,js也有,应该是非静态语言都都这样的问题吧
字符串跟数字,或者字符串跟字符串的加减乘除等运算,有可能出现精度问题,所以运算后一点要round保留精度后再比较,不然可能出问题。
<?php
$amount = "4.99";
$returned = "15.00";
$sum = "19.99";if ($amount + $returned > $sum) {//$amount + $returned = float(19.990000000000002) > 19.99var_dump("代码会跑进这里");
}if (round($amount + $returned,2) > $sum) {//$amount + $returned = float(19.99) > 19.99var_dump("代码不会跑进这里");
}//bcadd这个函数,它是个扩展,需要重新编译并在php.ini开启,如果没开就用round即可
$sumB = bcadd($amount, $returned, 2);//字符串 19.99
if ($sumB > $sum) {var_dump("代码不会跑到这里");
}