是否有可能通过Double in Java多个BigInteger?

时间:2012-10-28 02:31:48

标签: java biginteger

我有一个非常大的数字( number1 )存储为BigIntegerdouble(数字2)。我计划将 number1 number2 相乘,并将结果存储为double。

使用multiply()方法并没有帮助我实现这一目标。前进的方向是什么?

4 个答案:

答案 0 :(得分:16)

为了尽可能长时间地保留任意精度,请在BigDecimal中进行乘法运算,然后将结果转换为double,如下所示:

BigDecimal tmp = new BigDecimal(myBigInteger);
tmp = tmp.multiply(new BigDecimal(myDouble));
double res = tmp.doubleValue();

答案 1 :(得分:8)

最简单的解决方案可能是big.doubleValue() * myDouble

遗憾的是,这不会特别快,因为BigInteger.doubleValue()的实施速度非常慢。 (未来可能会更快......也许如果Oracle应用我的patch。)

或者,您可以使用Guava's DoubleMath.roundToBigInteger(double, RoundingMode)double直接翻到BigInteger

答案 2 :(得分:1)

在BigInteger上调用.doubleValue(),然后将它们乘以双倍。

答案 3 :(得分:1)

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

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

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