我有一个非常大的数字( number1 )存储为BigInteger
和double
(数字2)。我计划将 number1 和 number2 相乘,并将结果存储为double。
使用multiply()
方法并没有帮助我实现这一目标。前进的方向是什么?
答案 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;