码迷,mamicode.com
首页 > Web开发 > 详细

PHP浮点数引起的四舍五入问题

时间:2016-05-04 21:05:35      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

同事在开发中,遇到一个浮点数问题,过来问我,问题如下:

$a = 0.705;
$b = 20.795;
$c = 20.715;
$d = 20.745;

echo sprintf(‘%0.2f‘, $a) . ‘<br>‘; //0.70
echo sprintf(‘%0.2f‘, $b) . ‘<br>‘; //20.80
echo sprintf(‘%0.2f‘, $c) . ‘<br>‘; //20.71
echo sprintf(‘%0.2f‘, $d) . ‘<br>‘; //20.75

所有变量都取2位小数,从结果得知:$b 和 $d 四舍五入了,$a 和 $c 却没有。

同样第三位小数都是5,怎么会出现这种情况呢?

同过查阅文档,调试

echo sprintf(‘%0.20f‘, $a). ‘<br>‘; // 0.70499999999999996003
echo sprintf(‘%0.20f‘, $b). ‘<br>‘; // 20.79500000000000170530
echo sprintf(‘%0.20f‘, $c). ‘<br>‘; // 20.71499999999999985789
echo sprintf(‘%0.20f‘, $d). ‘<br>‘; // 20.74500000000000099476

显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。

PHP浮点数引起的四舍五入问题

标签:

原文地址:http://www.cnblogs.com/cqingt/p/5459545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!