2012-10-28 32 views
4

我有一個非常大的數字(number1)存儲爲BigIntegerdouble(數字2)。我打算乘以number1number2,並將結果存儲爲double。是否有可能通過Java中的Double來倍增BigInteger?

使用multiply()方法並沒有幫助我實現這一點。前進的方向是什麼?

+3

你的問題缺乏一些重要信息。首先,「沒有幫助我」是什麼意思? –

+2

*「我打算將number1和number2相乘,並將結果存儲爲double。」*爲什麼?試圖破解一些未經證實的數學原理? –

回答

7

最簡單的解決方案可能是big.doubleValue() * myDouble

不幸的是,這不會特別快,因爲BigInteger.doubleValue()的執行速度非常慢。 (這可能是在未來更快......也許Oracle是否適用於我的patch

或者,你可以直接使用Guava'sDoubleMath.roundToBigInteger(double, RoundingMode)一個double四捨五入到BigInteger

+0

使用'doubleValue()'工作。 Javadoc說這個方法返回BigInteger爲double。但這是怎麼回事? BigInteger的價值如此之大,它如何能夠適應雙倍的範圍呢? – jesterII

+1

如果我沒有記錯的話,雙打可以保存2^1024或2 * 10^308的值。儘管如此,它在存儲這些值時只有有限的_precision_。 –

+0

dasblinkenlight的'BigDecimal'答案比這個答案好得多,因爲沒有損失是精確的 –

1

在BigInteger上調用.doubleValue(),並將它們乘以雙精度。

1

爲什麼BigInteger#multiply()沒有幫助?有真的只有兩個合理的答案:

BigInteger a = /* whatever */; 
double b = /* whatever */ 

// either 
double result = a.multiply(new BigInteger(b)).doubleValue(); 
// or 
double result = a.doubleValue() * b; 
+0

*「確實只有兩個合理的答案」* - 除了其他合理的答案:-) –

13

爲了儘可能長時間地保存任意精度,做乘法BigDecimal,然後將結果轉換爲double,像這樣:

BigDecimal tmp = new BigDecimal(myBigInteger); 
tmp = tmp.multiply(new BigDecimal(myDouble)); 
double res = tmp.doubleValue(); 
相關問題