2017-01-25 75 views
-2

當我在程序中增加兩個'double'變量時,出現問題,我得到的結果爲零。爲什麼?乘以兩個雙變量的結果是零,爲什麼?

例如:

1.0E-321 * 5.321777473676208E-4 = 0.0 

如何防止結果不爲零?

+2

'double'具有[最小值](https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#MIN_VALUE)。如果您嘗試存儲小於此數字的數字,則會得到[下溢](https://en.wikipedia.org/wiki/Arithmetic_underflow)。 – khelwood

+0

有沒有解決方法? –

+0

使用'BigDecimal'。 – Kayaman

回答

5

double有一個minimum value。如果您嘗試存儲小於此數字的數字,則會得到underflow。可以使用BigDecimal類。

BigDecimal a = new BigDecimal("1.0E-321"); 
BigDecimal b = new BigDecimal("5.321777473676208E-4"); 
System.out.println(a.multiply(b)); 
-2

雙具有最大和微小按蚊值(某處大約-1.7 * 10^308),並且由於UR calulation具有近似於5.3 E325的結果它顯示了一個錯誤ü可以嘗試第一和然後multipying數字例如 1 * 5.32177的指數,然後簡單地添加冪(-321 +( - 4)),因此你可以得到你的答案。 :)

相關問題