首页 > 解决方案 > 为什么 Lua 以这种方式工作以及如何解决浮点数问题?

问题描述

那是我的代码:

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

结果在控制台:

2040    2039    2040

如果 a==2040 那么为什么当我math.floor使用该数字时,它会减少?我怎样才能写出比这种奇怪行为更精确的数学函数?

标签: lua

解决方案


简单地说:计算机没有无限的内存,所以它们只能使用这么多位来存储一个数字。如果数字有太多小数,它们会在某个地方被截断,而二进制表示的 0.4(五分之二)的小数点数多于它可以保存的小数点。所以在切断它们之后,你会得到 0.399999something,它print足够聪明,可以打印为 0.4,但如果你floor()这样做,它会毫不留情地四舍五入,从而得到你看到的结果。

另请注意,您可能只是用谷歌搜索过这个;这是编程中最常见的问题之一;)


例如,试试这个:

string.format("%f",     20.4*100)
--> 2040.000000
string.format("%0.20f", 20.4*100)
--> 2039.99999999999977262632

推荐阅读