Lua中math.floor(21000*0.7)与math.floor(14700.0)返回值不一致问题
Lua 5.3.x/5.4.x中math.floor()的精度差异问题
在Lua 5.3和5.4系列版本里,用math.floor()处理两个看似等价的数值时,会出现结果不一致的情况:
- 执行
math.floor(21000*0.7),返回值是14699 - 执行
math.floor(14700.0),返回值是14700
这是浮点数的精度限制导致的:21000*0.7的计算结果并不是精确的14700.0,而是一个极其接近14700但略小于它的浮点数(比如实际存储值可能是14699.999999999998)。math.floor()的逻辑是向下取整,对这个略小的数值取整就会得到14699;而直接传入14700.0时,这个值可以被浮点数精确表示,所以取整结果就是14700。
内容的提问来源于stack exchange,提问作者Ace.Yin
相关产品推荐
相关产品推荐

