浮点数相减问题
<?
$a = 15521.42;
$b = 15480.3;
echo $a-$b;
?>
在PHP4.0环境下,不支持BCMath,出来的结果竟是41.120000000001,不知道是否与BCMath有关?
有类似情况的朋友,说说你们的解决方法呢?
实在是太奇怪了,这样的数据也不大,精度也不高,在PHP5。0下是没有这个问题的
问题点数:20、回复次数:4Top
1 楼zalvsa(水米)回复于 2006-01-03 10:50:50 得分 0
PHP的运算有时候确实会出现类似的问题。有时候我用number_format格式化一下就好了。不过我也没找到原因。。。。。。Top
2 楼hsboy(PHP it!)回复于 2006-01-03 11:00:14 得分 10
正常的,这与计算机内部浮点数表示形式有关。浮点数计算不可能打到100%精度,这一点不光PHP中存在。
正确方法是计算完成后使用round函数取得想要精度的浮点数,比如
<?
$a = 15521.42;
$b = 15480.3;
echo round($a-$b, 2);
?>
会输出41.12Top
3 楼zalvsa(水米)回复于 2006-01-03 11:50:22 得分 10
有时候经过round运算后的值会变成科学记数法的形式。Top
4 楼hsboy(PHP it!)回复于 2006-01-03 19:58:52 得分 0
呵呵,正确的方法就是用round函数,number_format返回结果是字符串,也就是说返回的是字符串“41.12”而不是数字41.12,如果这个结果还要进行其他运算而不是直接进行输出,则使用number_format的效率会低很多。
你可以在中间过程使用round函数,输出前再使用number_format确保输出的格式。Top




