PHP 小数的计算方式太坑爹了吧?

OopsJeff 2013-07-04 12:05:21
if(0.030 != (0.530-0.500+0+0))
{
$s = 0.530-0.500+0+0;
$s = 0.03 - $s;
}


这居然不相等??
相减后居然不是0

这PHP 是外星计算法吗?
...全文
561 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2013-07-04
  • 打赏
  • 举报
回复
看来你还得补习一下“有效数”的相关知识
  • 打赏
  • 举报
回复
引用 3 楼 meiyoudao 的回复:
[quote=引用 1 楼 xuzuning 的回复:] 请你补习一下有关浮点数的知识
$f = (0.530-0.500+0+0)*1000; $a = (0.030*1000); $ssa = doubleval($a) - doubleval($f); 这样写都错...... 他是怎么计算的啊?[/quote] 这个不光php这样,JAVA也有着现象的 所以PHP要解决浮点数的办法有2个 一个是 if(0.030 != (0.530-0.500+0+0)) { $s = 0.53-0.5; $s = 0.03-"$s"; echo $s; } 把变量的那个用双引号加起来就OK了 还有的一个办法就是用round函数了
OopsJeff 2013-07-04
  • 打赏
  • 举报
回复
引用 4 楼 chinmo 的回复:
怎么说呢 简单的十进制分数不能在丢失一点点精度的情况下转化为二进制的格式,浮点数永远不会精确到最后一位,那么在PHP中,简单的浮点数运算是很有可能丢失精度,从而造成计算的结果出现混乱
那像这样的计算,应该怎么来做?
  • 打赏
  • 举报
回复
怎么说呢 简单的十进制分数不能在丢失一点点精度的情况下转化为二进制的格式,浮点数永远不会精确到最后一位,那么在PHP中,简单的浮点数运算是很有可能丢失精度,从而造成计算的结果出现混乱
OopsJeff 2013-07-04
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
请你补习一下有关浮点数的知识
$f = (0.530-0.500+0+0)*1000; $a = (0.030*1000); $ssa = doubleval($a) - doubleval($f); 这样写都错...... 他是怎么计算的啊?
OopsJeff 2013-07-04
  • 打赏
  • 举报
回复
即使我 $f = (0.530-0.500+0+0)*1000; $a = (0.030*1000); $s = (0.530-0.500+0+0)*1000; $ssa = $a - $s; 这样也错啊
xuzuning 2013-07-04
  • 打赏
  • 举报
回复
请你补习一下有关浮点数的知识

21,887

社区成员

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

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