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是相等的啊?问题出在哪
展开
 我来答
yaoyue1019
2015-11-27 · 知道合伙人互联网行家
yaoyue1019
知道合伙人互联网行家
采纳数:804 获赞数:3392
擅长lua脚本 与android前端交互设计

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

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式