1.常見問題php
$a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
打印出來的值竟然爲 boolean falsespa
printf("%.20f", $a); printf("%.20f", $b); 0.10000000000000000555 0.69999999999999995559
顯然是不相等的。code
對於經常使用金額數據比較orm
$a = 456;blog
$b = 4.56;ci
$a == $b*100 是不成立的rem
printf("%.20f", $a); printf("%.20f", $b*100); 456.00000000000000000000 455.99999999999994315658
顯然也是不成立的 字符串
2.解決辦法(總結的如下方式)string
1)bccomp ( string $left_operand
, string $right_operand
[, int $scale
= int ] ) 高精度的比較兩個浮點數(字符串)it
若是兩個數相等返回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;
相同小數是相同的