2014-02-20 82 views
1

我需要檢查NSNumber的總數字計數。最簡單的方法是將其轉換爲NSString,然後檢查其長度。另一種方法是採取整數值,執行循環除以10.只是想知道是否有其他選項:)如何獲取NSNumber值的長度?

+0

轉換成字符串,然後獲得長度可能會讓你陷入麻煩,如果有一個小數或'-'符號。 – GeneralMike

+0

是的,但我只檢查正數(信用卡號碼),所以應該沒問題。 – Centurion

回答

4

log10()函數會讓你關閉。喜歡的東西:

ceil (log10 (x)) 

例如:

> ceil (log10 (200)) 
3 
> ceil (log10 (9999)) 
4 

也許在fabs添加爲:

ceil (log10 (fabs (x))) 

小數的數字,上面是行不通的。但是,你可以嘗試分解爲整數+分數並獨立處理兩個分數。

+0

謝謝。從數字轉換爲字符串和檢查長度來看,這種解決方案是否更好?可能是性能,乾淨的代碼等等。因爲log10 + ceil看起來像這樣簡單操作的計算開銷(特別是對於正數)。所以,我想我會後退到使用convertToString + strLengh解決方案。 – Centurion

+0

轉換爲字符串並檢查長度肯定更具可讀性。 – Lance

+0

我剛剛提供了另一個選項。對我而言,我使用的將取決於應用程序。但是,有一點可以肯定,對於這樣的低級計算來說,效率/性能決不會涉及到。就可讀性而言,應該將上面的基於「log」的解決方案包裝在另一個函數中,比如說'fdigit_count(x)'。 – GoZoner