lua求和后比较遇到的问题(急,在线等!!)

wgyygw5 2013-05-19 06:11:26
编写了一个函数来判断 总和是否为需要的值
判断和是否为多少=function(tbl,num,sum)
local a=0;
local aall=0;
for i=1,num,1 do
a=tbl[i];
aall=aall+a;
end
if aall==sum then
return 0;
elseif aall>sum then
return 1;
else
return -1;
end
end,

现在的问题是:我几个数字明明加起来是100,但是为什么和需要的100比较的时候为false??
tbl={55,44.8,0.1,0.1,0}
a=判断和是否为多少(tbl,5,100)
print(a)--本来是返回0才对的,结果返回了-1

我自己做了些测试,也发现有不对,但是始终不知道原因
如:
print(55.0+44.8+0.1 ==99.9) --false
print(55.0+44.9 ==99.9) --ture
print(55.0+44.8+0.1+0.1+0.0 ==100)--false
...全文
72 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
panghuhu250 2013-05-19
  • 打赏
  • 举报
回复
还可以看看这个:http://blog.sciencenet.cn/blog-618303-505711.html
引用 2 楼 panghuhu250 的回复:
计算机存储、处理浮点数时会有误差。要检测两个浮点数x,y相等,通常用|x-y|<epsilon来实现,其中epsilon是一个你给定的误差上限。
panghuhu250 2013-05-19
  • 打赏
  • 举报
回复
计算机存储、处理浮点数时会有误差。要检测两个浮点数x,y相等,通常用|x-y|<epsilon来实现,其中epsilon是一个你给定的误差上限。
> ll = function(tbl,num,sum)
            local a=0;
            local aall=0;
            for i=1,num,1 do
                a=tbl[i];
                aall=aall+a;
            end        
            if math.abs(aall-sum)<0.000001 then -- aall和sum是否足够接近
                return 0;
            elseif aall>sum then
                return 1;
            else
                return -1;
            end        
end
> print(ll({55,44.8,0.1,0.1,0}, 5, 100))
0
wgyygw5 2013-05-19
  • 打赏
  • 举报
回复
我找到解决办法了,感觉是55.0+44.8+0.1+0.1+0.0实际是等于了99点几,只是看起来是100. 使用 a,b=math.modf(55.0+44.8+0.1+0.1+0.0)/1 ; print(a,b) 可以大概看出来。但是具体原因还是不懂??? 解决办法:把所得的和 和 要比较的数 都转换为字符串,再比较。。。 (55.0+44.8+0.1+0.1+0.0).."" 10..""

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

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