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;
相同小数是相同的