我有一個奇怪的問題。我試圖將方程的結果存儲到雙變量中。奇怪的Java數學執行
double s = (((100 + 1)*(1/3))/100 + (1/3));
這將返回值a 0而不是.67(從計算器計算出的正確值)。爲什麼會發生這種情況?
注:說我可以只讓S = 0.67是不是一個解決方案,
提前感謝的解決方案。
我有一個奇怪的問題。我試圖將方程的結果存儲到雙變量中。奇怪的Java數學執行
double s = (((100 + 1)*(1/3))/100 + (1/3));
這將返回值a 0而不是.67(從計算器計算出的正確值)。爲什麼會發生這種情況?
注:說我可以只讓S = 0.67是不是一個解決方案,
提前感謝的解決方案。
下面使用整數(即截斷)劃分,其結果是零:
1/3
要獲得浮點除法,打開任一參數的成雙重,例如
1.0/3
因此,整個表達式變爲:
double s = (((100 + 1)*(1./3))/100 + (1./3));
1.
相同1.0
。表達與double
相同的號碼的其他方式是1d
和1D
。
以上表達式評估爲0.6699999999999999
。
是的,我不知道我是如何讓這個滑倒。非常感謝。這一直困擾我很長一段時間。 – 2013-03-24 14:21:01
編譯器看到你的numers爲INT的..
嘗試這樣的:
double s = (((100d + 1d)*(1d/3d))/100d + (1d/3d));
現在的結果將是:
0.6699999999999999
如果添加'D'畢竟你的數字,例如'100d',你將使用浮點操作,而不是整數操作。 – jedwards 2013-03-24 14:21:24
正如已經回答的那樣,我只是增加了一個側面提示,如果你想要'0.67'的精確值不像'0.669999999999',你應該使用'BigDecimal'。 http://stackoverflow.com/questions/322749/retain-precision-with-doubles-in-java – gaganbm 2013-03-25 13:57:58