PHP rounding error with simple multiplication(简单乘法的PHP舍入误差)
本文介绍了简单乘法的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舍入误差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:简单乘法的PHP舍入误差
基础教程推荐
猜你喜欢
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01