这是我的代码:
a=20.4*100
print(a,math.floor(a),math.floor(2040))
控制台结果:
2040 2039 2040
如果a == 2040,那么为什么当我用该数字执行math.floor
时,它会减小?我怎么能以比那个奇怪的行为更高的精度编写数学函数?
简单地说:计算机没有无限的内存,因此它们只能使用那么多的位来存储数字。如果数字的小数位数过多,则会在某处被截断,恰好碰巧以二进制表示的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