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舍入误差
基础教程推荐
猜你喜欢
- 如何在 Laravel 中使用 React Router? 2022-01-01
- PHP PDO MySQL 查询 LIKE ->多个关键词 2021-01-01
- 如何在 Laravel 5.3 注册中添加动态下拉列表列? 2021-01-01
- PHP 类:全局变量作为类中的属性 2021-01-01
- 学说 dbal querybuilder 作为准备好的语句 2022-01-01
- YouTube API v3 点赞视频,但计数器不增加 2022-01-01
- 在PHP中根据W3C规范Unicode 2022-01-01
- 有什么方法可以用编码 UTF-8 而不是 Unicode 返回 PHP`json_encode`? 2021-01-01
- Cron Jobs 调用带有变量的 PHP 脚本 2022-01-01
- 如何替换eregi() 2022-01-01
