2013-11-20 40 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

相關問題