Lua math.floor的奇怪问题
代码是这样locald=0forn=1,10dod=d+4.9print(n..":"..d)endlocala=math.floor(d)print("a="..a.....
代码是这样
local d = 0for n = 1,10 do d = d + 4.9 print(n..":"..d)end
local a = math.floor(d)print("a="..a.." d="..d)
输出结果确是这样
a和d的值应该I是相等的啊?问题出在哪 展开
local d = 0for n = 1,10 do d = d + 4.9 print(n..":"..d)end
local a = math.floor(d)print("a="..a.." d="..d)
输出结果确是这样
a和d的值应该I是相等的啊?问题出在哪 展开
1个回答
展开全部
双精在做小数时 就应该别注意
老师教编程的时候 应该都有特别强调过吧 两个小数相等 不能用等号 而应该用他们的差的绝对值小于一个很小的数 比如 math.abs(a-b) < 10e-6
原因是 电脑是用二进制存储数据 而类似0.1这样的数字 在电脑里存储起来 其实是一个很长的数字,在二进制里 0.1可能是一个无限不循环小数 所以我们会在一定程度上截取下来 截取之后 就难免导致了实际值和我们存储的值有很小很小的差异
而这里输出的d=49 就是一个小于49并十分接近49的一个数字
使用floor的时候 因为它确实比49小 所以就变成48了
老师教编程的时候 应该都有特别强调过吧 两个小数相等 不能用等号 而应该用他们的差的绝对值小于一个很小的数 比如 math.abs(a-b) < 10e-6
原因是 电脑是用二进制存储数据 而类似0.1这样的数字 在电脑里存储起来 其实是一个很长的数字,在二进制里 0.1可能是一个无限不循环小数 所以我们会在一定程度上截取下来 截取之后 就难免导致了实际值和我们存储的值有很小很小的差异
而这里输出的d=49 就是一个小于49并十分接近49的一个数字
使用floor的时候 因为它确实比49小 所以就变成48了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询