我正试图在BigInteger
方法旁边使用Math.Log10
值。
final BigInteger answerNo = fact;
final int digits = 1 + (int)Math.floor(Math.log10(answerNo));
不幸的是,编译器说不兼容的类型。
如果我将int
更改为BigInteger
s,它仍然不喜欢它。
答案 0 :(得分:6)
您只需执行以下操作即可找到位数:
,而不是log10
int digits = answerNo.toString().length();
答案 1 :(得分:1)
int
分配给BigInteger
- 您可以写信:final BigInteger answerNo = BigInteger.valueOf(fact);
Mat.log10
需要double
,而不是BigInteger
如果你不介意精度损失,你可以简单地使用双打:
final int digits = 1 + (int)Math.floor(Math.log10(fact));
如果您关心精度,则需要手动计算日志。
答案 2 :(得分:0)
BigInteger.toString()
的存储效率可能会很低。
您可以尝试将BigInteger
转换为BigDecimal
并使用BigDecimal.precision()
来实现相同的目的。有关详情,请参见此answer。