问题
如前所述,在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
发布于 2022-08-22 14:38:46
原因
你所得到的行为是因为浮点不准确。有关更多细节,请参见this问题,但简而言之,原因与我们不能用有限的十进制数字表示1 / 3 (重复0.33次)的原因类似。
你可以自己测试!使用格式获得更精确的字符串表示,并打印它:
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的参数)
https://stackoverflow.com/questions/73446684
复制相似问题