我正在尝试使用BigIntegersideMath.Log10方法中的值。
final BigInteger answerNo = fact;
final int digits = 1 + (int)Math.floor(Math.log10(answerNo));
不幸的是,编译器说不兼容的类型。
如果我将ints 更改为BigIntegers 它仍然不喜欢它。
我正在尝试使用BigIntegersideMath.Log10方法中的值。
final BigInteger answerNo = fact;
final int digits = 1 + (int)Math.floor(Math.log10(answerNo));
不幸的是,编译器说不兼容的类型。
如果我将ints 更改为BigIntegers 它仍然不喜欢它。
log10您可以通过简单地执行以下操作来找到位数,而不是执行:
int digits = answerNo.toString().length();
int给 a BigInteger- 您可以编写:final BigInteger answerNo = BigInteger.valueOf(fact);Mat.log10期望 a double,而不是 aBigInteger如果你不介意精度损失,你可以简单地使用双打:
final int digits = 1 + (int)Math.floor(Math.log10(fact));
如果您关心精度,则需要手动计算对数。
BigInteger.toString()如果您只关心位数,则在内存方面可能效率低下。
您可以改为尝试转换BigInteger为 aBigDecimal并使用BigDecimal.precision()来实现相同的效果。有关详细信息,请参阅此答案。