1

我正在尝试使用BigIntegersideMath.Log10方法中的值。

final BigInteger answerNo = fact;
final int digits = 1 + (int)Math.floor(Math.log10(answerNo));

不幸的是,编译器说不兼容的类型

如果我将ints 更改为BigIntegers 它仍然不喜欢它。

4

3 回答 3

7

log10您可以通过简单地执行以下操作来找到位数,而不是执行:

int digits = answerNo.toString().length();
于 2012-09-30T17:01:13.110 回答
1
  1. 您不能将 a 分配int给 a BigInteger- 您可以编写:final BigInteger answerNo = BigInteger.valueOf(fact);
  2. Mat.log10期望 a double,而不是 aBigInteger

如果你不介意精度损失,你可以简单地使用双打:

final int digits = 1 + (int)Math.floor(Math.log10(fact));

如果您关心精度,则需要手动计算对数。

于 2012-09-30T16:59:44.547 回答
0

BigInteger.toString()如果您只关心位数,则在内存方面可能效率低下。

您可以改为尝试转换BigInteger为 aBigDecimal并使用BigDecimal.precision()来实现相同的效果。有关详细信息,请参阅此答案

于 2020-07-16T09:54:03.520 回答