PHP 在使用时似乎舍入不正确(int)
来转换变量。为什么?
$multiplier = 100000000;
$value = 0.01020637;
echo (int)($value*$multiplier);
Output: 1020636
. (意外的输出)
$multiplier = 100000000;
$value = 0.01020637;
echo ($value*$multiplier);
Output: 1020637
。 (预期正确输出)
编辑:情况变得更糟......
$multiplier = 100000000;
$value = 0.01020637;
echo $temp = ($value*$multiplier);
echo '<br/>';
echo (int)$temp;
Output:
1020637
1020636
当您处理浮点数时,事情可能会变得棘手,浮点数学(以及涉及的问题)很好理解,但可能会在您没有预料到时突然出现。就像这里发生的那样。你可以阅读规则广泛地使用,或者在处理浮点运算时使用语言提供的工具。
当您关心所涉及的精度时,您应该使用bcmul()功能。这是一个“可选”扩展,但如果您关心精度,那么很快就会开始需要它。
Example:
multiplier = 100000000;
$value = 0.01020637;
echo (int)($value*$multiplier);
echo "\n";
echo bcmul($value, $multiplier, 0);
Sample: http://ideone.com/Wt9kKb
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)