我有一個非常大的數字(number1)存儲爲BigInteger
和double
(數字2)。我打算乘以number1和number2,並將結果存儲爲double。是否有可能通過Java中的Double來倍增BigInteger?
使用multiply()
方法並沒有幫助我實現這一點。前進的方向是什麼?
我有一個非常大的數字(number1)存儲爲BigInteger
和double
(數字2)。我打算乘以number1和number2,並將結果存儲爲double。是否有可能通過Java中的Double來倍增BigInteger?
使用multiply()
方法並沒有幫助我實現這一點。前進的方向是什麼?
最簡單的解決方案可能是big.doubleValue() * myDouble
。
不幸的是,這不會特別快,因爲BigInteger.doubleValue()
的執行速度非常慢。 (這可能是在未來更快......也許Oracle是否適用於我的patch)
或者,你可以直接使用Guava'sDoubleMath.roundToBigInteger(double, RoundingMode)
一個double
四捨五入到BigInteger
。
使用'doubleValue()'工作。 Javadoc說這個方法返回BigInteger爲double。但這是怎麼回事? BigInteger的價值如此之大,它如何能夠適應雙倍的範圍呢? – jesterII
如果我沒有記錯的話,雙打可以保存2^1024或2 * 10^308的值。儘管如此,它在存儲這些值時只有有限的_precision_。 –
dasblinkenlight的'BigDecimal'答案比這個答案好得多,因爲沒有損失是精確的 –
在BigInteger上調用.doubleValue()
,並將它們乘以雙精度。
爲什麼BigInteger#multiply()
沒有幫助?有真的只有兩個合理的答案:
BigInteger a = /* whatever */;
double b = /* whatever */
// either
double result = a.multiply(new BigInteger(b)).doubleValue();
// or
double result = a.doubleValue() * b;
*「確實只有兩個合理的答案」* - 除了其他合理的答案:-) –
爲了儘可能長時間地保存任意精度,做乘法BigDecimal
,然後將結果轉換爲double
,像這樣:
BigDecimal tmp = new BigDecimal(myBigInteger);
tmp = tmp.multiply(new BigDecimal(myDouble));
double res = tmp.doubleValue();
你的問題缺乏一些重要信息。首先,「沒有幫助我」是什麼意思? –
*「我打算將number1和number2相乘,並將結果存儲爲double。」*爲什麼?試圖破解一些未經證實的數學原理? –