2
對於這些代碼行,我返回0作爲輸出,它們都是相等的。現在,如果我理解正確,ab和c可能會存儲稍微不同的真實值.3版本。因此,當針對這些值執行Float.compare(...)時,我希望返回0以外的值作爲輸出。爲什麼我將它們作爲0?浮點運算和浮點值比較
float a = 0.15f + 0.15f;
float b = 0.1f + 0.2f;
float c = 0.3f;
System.out.println(Float.compare(a, b)); //<--- outputs 0
System.out.println(Float.compare(a, c)); //<--- outputs 0
System.out.println(Float.compare(b, c)); //<--- outputs 0
只是因爲浮點不是一般的不夠準確,並不意味着它是不是在特定情況下不夠準確。 –
你可以加上你的問題,對於double值,它不會以這種方式工作(因爲'0.1d + 0.2d'的結果是'0.30000000000000004',所以'-1','0','1'其他數字是'0.3')。 – Pshemo
@Pshemo:「0.1d」和「0.1f」一樣不準確,只是更多的小數位。浮點精度不能表示0.1,它是以2爲底的重複序列。 –