2013-11-20 33 views
3

为什么57.5与57.5不一样?例如:为什么0.575 * 100与57.5不一样?

> b = 57.5 
> print (57.5 == b) 
true 

> c = 0.575 * 100  
> print (c) 
57.5 

> print (c == b) 
false 

> print (c, b) 
57.5 57.5 

所以在某种程度上,即使c和b为57.5,该数字不等于

是否有可能是一个四舍五入的问题?但是如果是这样,不应该打印不同的数字吗?

编辑: 非常好,有没有办法在LUA中打印实际值?就像我想让它打印57.4999999999 ...?

+5

[_每个程序员都应该知道的浮点数](http://floating-point-gui.de/) – bames53

回答

3
b=57.499999999999996 
c = 0.575 * 100 
print (c==b) 

这将返回True。 事实上,如果你输入0.575

"%.17f" % 0.575 

返回0.57499999999999996。

3

这与(1/3) * 3在固定精度小数运算中不会给出与1相同的结果。没有可用3乘以1的固定精度小数的表示。

由于打印代码将输出舍入,所以它们的打印效果相同。你想(1/3) * 3打印为.9999999999999991

试试这个:

b = 57.5 
c = 0.575 * 100 
print (string.format("b = %.24f", b)) 
print (string.format("c = %.24f", c)) 

输出是:

b = 57.500000000000000000000000 
c = 57.499999999999992894572642 
+0

我不确定在一般情况下是否要打印.999 ...或1,但是有没有办法将该值打印为.999 ...? – Alex

2

为了回应您编辑的如何以更高的精度打印数字的问题,它与C中的printf大致相同。

> =string.format('%.17f', 0.1) 
0.10000000000000001 

请参阅this question以及。

至于与浮点数有关的问题,过去在其他地方已经多次涉及。在评论中提供的信息链接将复制here

+0

很棒,用这个我可以关闭这个问题 – Alex

相关问题