4

非常に大きな数( number1BigInteger ) が、および(number2)として保存されていdoubleます。number1number2を乗算し、結果を double として格納する予定です。

メソッドを使用しても、multiply()これを達成するのに役立ちませんでした。進むべき道は何ですか?

4

4 に答える 4

18

任意の精度を可能な限り維持するには、 で乗算を行いBigDecimal、結果を に変換しdoubleます。次のようにします。

BigDecimal tmp = new BigDecimal(myBigInteger);
tmp = tmp.multiply(new BigDecimal(myDouble));
double res = tmp.doubleValue();
于 2012-10-28T02:52:47.447 に答える
8

最も簡単な解決策はおそらくbig.doubleValue() * myDouble.

BigInteger.doubleValue()残念ながら、実装が非常に遅いため、これは特に高速ではありません。(将来的にはもっと速くなるかもしれません...おそらくOracleが私のパッチを適用すれば.)

または、 Guava のを使用して a を adoubleに直接丸めることができます。BigInteger DoubleMath.roundToBigInteger(double, RoundingMode)

于 2012-10-28T02:34:13.513 に答える
1

.doubleValue()BigInteger を呼び出し、それらを double として乗算します。

于 2012-10-28T02:34:41.463 に答える
1

なぜ役に立たBigInteger#multiply()ないのですか?実際には、合理的な答えは 2 つだけです。

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

// either
double result = a.multiply(new BigInteger(b)).doubleValue();
// or
double result = a.doubleValue() * b;
于 2012-10-28T02:34:55.847 に答える