简单乘法的PHP舍入误差 [英] PHP rounding error with simple multiplication

查看:46
本文介绍了简单乘法的PHP舍入误差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用(int)强制转换变量时,PHP似乎不正确地进行舍入。为什么?

$multiplier = 100000000;
$value = 0.01020637;
echo (int)($value*$multiplier);
输出:1020636。(意外输出)

$multiplier = 100000000;
$value = 0.01020637;
echo ($value*$multiplier);
输出:1020637。(预期输出正确)

编辑:情况变得更糟...

$multiplier = 100000000;
$value = 0.01020637;
echo $temp = ($value*$multiplier);
echo '<br/>';
echo (int)$temp;

输出:

1020637

1020636

推荐答案

当您处理浮点时,事情可能会变得很复杂,浮点数学(以及涉及的问题)很容易理解,但在您意想不到的时候可能会突然出现。就像在这里发生的那样。您可以广泛阅读the rules,或者在处理浮点运算时使用语言提供的工具。

当您关心所涉及的精度时,应该使用bcmul()函数。这是一个"可选的"扩展,但如果您关心精度,很快就会开始需要它。

示例:

multiplier = 100000000;
$value = 0.01020637;
echo (int)($value*$multiplier);
echo "
";
echo bcmul($value, $multiplier, 0);

示例:http://ideone.com/Wt9kKb

这篇关于简单乘法的PHP舍入误差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆