# PHP Version 5.2.9
$a = 0.6/0.1;
$b = $a % 5;
print "\$a=$a; \$b=$b\n";
# result:
# $a=6; $b=0 # One should expect $b = 1
$a = 0.6/0.1;
$a = round($a);
$b = $a % 5;
print "\$a=$a; \$b=$b\n";
# result:
# $a=6; $b=1 # result as expected
为什么在第一种情况下结果$ b = 0 为什么round() - 函数似乎解决了这个问题?
答案 0 :(得分:3)
使用一堆小数位打印这两个数字,你会看到问题,这是由于floating point imprecision:
第一个$a
:
5.999999999999999111821580299874767661
第二个,在round()
之后:
6.000000000000000000000000000000000000
将第一个转换为int
(就像mod运算符在计算其值时所做的那样)会产生5
,而第二个产生6
。