1. 程式人生 > >關於浮點型的運算---比較

關於浮點型的運算---比較

字符串 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;

相同小數是相同的

關於浮點型的運算---比較