2012-03-29 36 views
0

我知道關於這類話題已經有很多不同的問題了,但是我找不到一種方法來滿足我的特定需求。動態四捨五入數Objective-C

我有一個浮點數,通過網絡發送給我,我需要將其轉換並繪製到屏幕上。數字的範圍可以從5.2,285.159,294729172.258,10734.112等。我想要做的是獲得用於從最有效數字下面的一個數字開始舍入的值。

例子:

5.2 = 5 
285.159 = 300 
294729172.258 = 300000000 
-10734.112 = -11000 

,可用於幫助引導我任何意見,將不勝感激。

+1

和294729172.258到300000000?您必須定義舍入條件,並執行舍入功能。 – fbernardo 2012-03-29 15:14:39

+0

我會認爲5.2 = 5但是像5.5 = 6 – Seb 2012-03-29 15:14:51

回答

3

這裏是我的解決方案:

int roundMostSignificant(float input) 
{ 
    NSNumber *number = [NSNumber numberWithFloat:input]; 
    static NSNumberFormatter *formatter = nil; 

    if (!formatter) 
    { 
     formatter = [NSNumberFormatter new]; 
     [formatter setMinimumSignificantDigits:1]; 
     [formatter setMaximumSignificantDigits:1]; 
     [formatter setUsesSignificantDigits:YES]; 
    } 

    return [[formatter numberFromString:[formatter stringFromNumber:number]] intValue]; 
} 

是,這個使用對象,但我認爲,這將是從長遠來看,你最好的選擇,因爲它處理四捨五入,解析等你。

+0

你先生是這樣的神。非常感謝!如果可能的話,你能否解釋一下在後臺做了些什麼或者指向描述這個過程的文檔?我想盡可能地學習。 – Seb 2012-03-29 15:40:57

+0

+1。而@Seb,這給'-10734.112'提供了'-10000',這比你提到的結果更合乎邏輯:'-11000'。 – sch 2012-03-29 15:43:31

+0

@Seb這是做什麼的,它首先將浮點數作爲輸入。然後,它將該浮點數轉換爲一個字符串,該字符串四捨五入爲有效數字,然後從該字符串重新創建一個數字,並返回該數字。 – 2012-03-29 16:00:52

1

有一個NSDecimalNumberNSDecimalNumberHandler類正是這樣做。您可以定義數字應該舍入到哪個精度和哪個方向。

簡單的例子可能是:

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithMatnissa:294729172258 exponent:-3 isNegative:NO]; 
NSDecimalNumberHandler *dnh = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:-6 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES]; 

NSDecimalNumber *rounded = [dn decimalNumberByRoundingAccordingToBehavior:dnh]; 

這可能是你最大的數字工作。