4

我有一个非常大的数字 ( number1 ) 存储为 aBigInteger和 a double(number2)。我计划将number1number2相乘,并将结果存储为双精度数。

使用该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 应用我的补丁。)

或者,您可以使用Guavadouble将 a直接舍入为 a 。BigInteger DoubleMath.roundToBigInteger(double, RoundingMode)

于 2012-10-28T02:34:13.513 回答
1

调用.doubleValue()BigInteger,并将它们作为双精度数相乘。

于 2012-10-28T02:34:41.463 回答
1

为什么BigInteger#multiply()没有帮助?实际上只有两个合理的答案:

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 回答