2012-09-30 100 views
1

我試圖沿着Math.Log10方法使用BigInteger值。計算BigInteger中的小數位數

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

不幸的是,編譯器說:不兼容的類型

如果我將int s更改爲BigInteger s,它仍然不喜歡它。

+0

我已經改變了這個問題的標題,使之符合的問題,並接受的答案的信息。顯然,數字的計數並不像執行實際的10對數那樣精確。 –

回答

5

而是通過簡單地做做log10你可以找到的數字的位數:

int digits = answerNo.toString().length(); 
+0

如果這是目標,那麼確實會更簡單! – assylias

+0

可能要從中減去1 :) –

+0

請注意,他的原始代碼添加了1 ... – epsalon

1
  1. 不能分配intBigInteger - 你可以寫:final BigInteger answerNo = BigInteger.valueOf(fact);
  2. Mat.log10需要一個double,不是BigInteger

如果你不介意的精度損失,你可以簡單地使用雙打:

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

如果你關心精度,你將需要手動計算日誌。