繁体   English   中英

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

[英]Is it possible to multiple a BigInteger by a Double in Java?

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

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

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

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

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

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

或者,您可以使用Guava的 DoubleMath.roundToBigInteger(double, RoundingMode)double直接DoubleMath.roundToBigInteger(double, RoundingMode)BigInteger

在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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM