關於浮點型的運算---比較
阿新 • • 發佈:2018-08-16
字符串 source dpa sans color word family justify 精度
1.常見問題
$a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
打印出來的值居然為 boolean false
printf("%.20f", $a); printf("%.20f", $b); 0.10000000000000000555 0.69999999999999995559
顯然是不相等的。
對於常用金額數據比較
$a = 456;
$b = 4.56;
$a == $b*100 是不成立的
printf("%.20f", $a); printf("%.20f", $b*100); 456.00000000000000000000 455.99999999999994315658
顯然也是不成立的
2.解決辦法(總結的以下方式)
1)bccomp ( string $left_operand
, string $right_operand
[, int $scale
= int ] ) 高精度的比較兩個浮點數(字符串)
如果兩個數相等返回0, 左邊的數left_operand
比較右邊的數right_operand
大返回1, 否則返回-1.
2)
$scale = 0.00001 $a = 0.6995559; $b = 0.6995552; $a - $b < $scale $scale 小數點後5位比較 $a == $b
3)$a /100 == $b;
相同小數是相同的
關於浮點型的運算---比較