2014-06-24 101 views
0

我想減去2個雙精度並將結果轉換爲整數。將int高效轉換爲double

d = 1.41384; 
d1 = 1.4133; 

d2 = (d-d1); /// 0.0005399999999 

int i = (int) (d2 /0.00001); // 53 
int i1 = (int) Math.ceil((d2 /0.00001)); //54 

Double無法表示所有值,因此減法可能會導致錯誤值,如上例所示。它是否也會發生減法的價值可能比預期略大? (例如0.00540000000001) Math.ceil在這種情況下給了我正確的答案,但有沒有更好的方法來解決這個問題?

+2

問題發生在*減法之前* –

+1

用'Math.round'替換'Math.ceil',所以它在任何情況下都能正常工作。 – Ari

回答

0

你的問題比這個更基礎,甚至:你認爲值1.41384實際上並不是那個值,但略有不同。至少在這種情況下,減法很可能是準確的,儘管將其轉換回字符串可能會有所改進。