我有一个非常大的数字(number1)作为BigInteger
存储,并且有一个double
(number2)。 我计划将number1和number2相乘,并将结果存储为double。
使用multiply()
方法没有帮助我实现这一目标。接下来该怎么办?
我有一个非常大的数字(number1)作为BigInteger
存储,并且有一个double
(number2)。 我计划将number1和number2相乘,并将结果存储为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 应用我的补丁,将来可能会更快。) DoubleMath.roundToBigInteger(double, RoundingMode)
将 double
四舍五入为 BigInteger
。doubleValue()
方法可以解决问题。Javadoc 表示此方法将 BigInteger 作为 double 返回。但是这是怎么做到的呢?BigInteger 的值非常大,它怎么能适应 double 的范围呢? - jIIBigDecimal
答案比这个答案好得多,因为它没有精度损失。 - Steve KuoBigInteger#multiply()
没有帮助?实际上只有两个合理的答案:BigInteger a = /* whatever */;
double b = /* whatever */
// either
double result = a.multiply(new BigInteger(b)).doubleValue();
// or
double result = a.doubleValue() * b;
.doubleValue()
,并将它们作为 double 值相乘。