计算BigInteger中的小数位数

时间:2012-09-30 16:57:30

标签: java class math biginteger

我正试图在BigInteger方法旁边使用Math.Log10值。

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

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

如果我将int更改为BigInteger s,它仍然不喜欢它。

3 个答案:

答案 0 :(得分:6)

您只需执行以下操作即可找到位数:

,而不是log10
int digits = answerNo.toString().length();

答案 1 :(得分:1)

  1. 您无法将int分配给BigInteger - 您可以写信:final BigInteger answerNo = BigInteger.valueOf(fact);
  2. Mat.log10需要double,而不是BigInteger
  3. 如果你不介意精度损失,你可以简单地使用双打:

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

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

答案 2 :(得分:0)

如果只关心数字计数,

BigInteger.toString()的存储效率可能会很低。

您可以尝试将BigInteger转换为BigDecimal并使用BigDecimal.precision()来实现相同的目的。有关详情,请参见此answer