我正在尝试使用BigInteger
sideMath.Log10
方法中的值。
final BigInteger answerNo = fact;
final int digits = 1 + (int)Math.floor(Math.log10(answerNo));
不幸的是,编译器说不兼容的类型。
如果我将int
s 更改为BigInteger
s 它仍然不喜欢它。
我正在尝试使用BigInteger
sideMath.Log10
方法中的值。
final BigInteger answerNo = fact;
final int digits = 1 + (int)Math.floor(Math.log10(answerNo));
不幸的是,编译器说不兼容的类型。
如果我将int
s 更改为BigInteger
s 它仍然不喜欢它。
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()
来实现相同的效果。有关详细信息,请参阅此答案。