为什么Lua会出现这种情况,如何解决浮点数问题?

这是我的代码:

a=20.4*100
print(a,math.floor(a),math.floor(2040))

在控制台的输出结果是:

2040    2039    2040

如果a等于2040,那么为什么对该数字进行math.floor操作时,它会减小? 我应该如何编写更准确的数学函数以避免这种奇怪的行为?

点赞
用户4984564
用户4984564

简单来说:计算机没有无限的内存,所以它们只能使用有限的位数来存储数字。如果数字有太多的小数位,计算机会将一部分截掉,而恰好在二进制表示中,2/5 的值 0.4 有比计算机能存储的更多的小数位;因此,在截掉一部分小数位后,你会得到 0.399999something,print 命令足够聪明,可以将其显示为 0.4,但如果你使用 floor() 命令将其向下取整,结果会无情地舍入到下一个更小的值。这就是你看到的结果。

另外请注意,你本来可以在 Google 上找到这个答案。这是编程中最常见的问题之一 ;)

例如,试试这个代码:

string.format("%f",     20.4*100)
--> 2040.000000
string.format("%0.20f", 20.4*100)
--> 2039.99999999999977262632
2019-09-26 07:16:31