PHP余数(%-operator)意外结果

时间:2012-12-17 15:26:17

标签: php

# 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() - 函数似乎解决了这个问题?

1 个答案:

答案 0 :(得分:3)

使用一堆小数位打印这两个数字,你会看到问题,这是由于floating point imprecision

第一个$a

5.999999999999999111821580299874767661 

第二个,在round()之后:

6.000000000000000000000000000000000000

将第一个转换为int(就像mod运算符在计算其值时所做的那样)会产生5,而第二个产生6

相关问题