浮点数相减问题

zhwb36 2006-01-03 09:57:26
<?
$a = 15521.42;
$b = 15480.3;
echo $a-$b;

?>
在PHP4.0环境下,不支持BCMath,出来的结果竟是41.120000000001,不知道是否与BCMath有关?
有类似情况的朋友,说说你们的解决方法呢?
实在是太奇怪了,这样的数据也不大,精度也不高,在PHP5。0下是没有这个问题的
...全文
347 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zalvsa 2006-01-03
  • 打赏
  • 举报
回复
有时候经过round运算后的值会变成科学记数法的形式。
hsboy 2006-01-03
  • 打赏
  • 举报
回复
正常的,这与计算机内部浮点数表示形式有关。浮点数计算不可能打到100%精度,这一点不光PHP中存在。

正确方法是计算完成后使用round函数取得想要精度的浮点数,比如
<?
$a = 15521.42;
$b = 15480.3;
echo round($a-$b, 2);

?>
会输出41.12
zalvsa 2006-01-03
  • 打赏
  • 举报
回复
PHP的运算有时候确实会出现类似的问题。有时候我用number_format格式化一下就好了。不过我也没找到原因。。。。。。
hsboy 2006-01-03
  • 打赏
  • 举报
回复
呵呵,正确的方法就是用round函数,number_format返回结果是字符串,也就是说返回的是字符串“41.12”而不是数字41.12,如果这个结果还要进行其他运算而不是直接进行输出,则使用number_format的效率会低很多。

你可以在中间过程使用round函数,输出前再使用number_format确保输出的格式。

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧