为什么Lua那样工作以及如何解决浮点数问题?

问题描述 投票:0回答:1

这是我的代码:

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

控制台结果:

2040    2039    2040

如果a == 2040,那么为什么当我用该数字执行math.floor时,它会减小?我怎么能以比那个奇怪的行为更高的精度编写数学函数?

lua
1个回答
1
投票

简单地说:计算机没有无限的内存,因此它们只能使用那么多的位来存储数字。如果数字的小数位数过多,则会在某处被截断,恰好碰巧以二进制表示的0.4(五分之二)的小数位数超出了保存的位数。因此,在剪掉它们之后,您剩下的0.399999东西,print足够聪明,可以打印为0.4,但是如果您floor(),它会四舍五入而不会产生怜悯,从而得到您看到的结果。

还请注意,您可以用谷歌搜索;这是编程中最常见的问题之一;)


作为示例,请尝试以下操作:

string.format("%f",     20.4*100)
--> 2040.000000
string.format("%0.20f", 20.4*100)
--> 2039.99999999999977262632
© www.soinside.com 2019 - 2024. All rights reserved.