首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >math.floor(21000*0.7)返回14699,而math.floor(14700.0)返回14700

问math.floor(21000*0.7)返回14699,而math.floor(14700.0)返回14700
EN

Stack Overflow用户
提问于 2022-08-22 14:22:59
回答 1查看 77关注 0票数 1

问题

如前所述,在21000*0.7和14700.0上使用14700.0时,返回的值是不同的。

math.floor(21000*0.7)返回14699,但math.floor(14700.0)返回14700。

Lua版本

5.3.x和5.4.x

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-22 14:38:46

原因

你所得到的行为是因为浮点不准确。有关更多细节,请参见this问题,但简而言之,原因与我们不能用有限的十进制数字表示1 / 3 (重复0.33次)的原因类似。

你可以自己测试!使用格式获得更精确的字符串表示,并打印它:

代码语言:javascript
复制
print(("%.14f"):format(21000*0.7))

打印14699.99999999999818!

Lua tostring没有这样的精度。有些方言改变了这一点,因为就像你的情况一样,它可能会让人感到困惑。这也是为什么0.1 + 0.2 == 0.3的计算结果为false,但打印这两个表达式分别打印0.3。

解决方案

解决方案是这样做:21000 * 7 / 10,假设21000将被一个变量替换。如果整个分数未知,如果21000将被一个整数替换,那么您可以尝试执行以下操作:21000 * 0.7 + 0.1 (作为floor的参数)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73446684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档