2012-04-19 49 views
4

可能重複:
Rounding numbers in Objective-C
objective -C : how to truncate extra zero in float?
Correcting floating point numbers限制小數點到所需要的

在Objective C,我有接受的答案,計算爲一個雙如圖所示:

double answer = a/b; 

雙變量有時可以是一個整數,但也可以是一個整數,例如

NSLog(@"%f", answer) 

這可以返回2.000000或5.142394或2.142000。

我想知道是否有讓尾隨0的不是例如可見編輯的小數位方式:

2.000000將2
5.142394將5.142394
2.142000將是2.142

這怎麼辦?

+0

不會把a.f/b.f限制爲整數值嗎? – CodaFi 2012-04-19 03:51:43

+0

@CodaFi我不希望將其限制爲整數值。它需要有dec的地方,但不要超過0。這不是重複的,因爲我不是想要整理數字。我從來沒有提到舍入數字。 – CoreCode 2012-04-19 03:52:51

+0

@lnafziger這不是真的,因爲這不是一個浮點數問題 – CoreCode 2012-04-19 04:11:39

回答

10

如果你想硬編碼你之後小數位的數量,這將給你小數點後兩位:

NSLog(@"%.2f", answer); 

瞭解更多關於格式說明在這裏:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

另外,如果你想改變即時小數位的數量,可以考慮使用NSNumberFormatter類:

int maxDigitsAfterDecimal = 3; // here's where you set the dp 

NSNumberFormatter * nf = [[NSNumberFormatter alloc] init]; 
[nf setMaximumFractionDigits:maxDigitsAfterDecimal]; 

NSString * trimmed = [nf stringFromNumber:[NSNumber numberWithDouble:3.14159]]; 
NSLog(@"%@", trimmed); // in this case, 3.142 

[nf release]; 
+0

雖然我需要它是動態的,但並不總是2個十進位 – CoreCode 2012-04-19 03:51:54

+0

哦。在這種情況下,請嘗試使用NSNumberFormatter:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumberFormatter_Class/Reference/Reference.html – wpearse 2012-04-19 03:55:28

+0

如果您可以重新編寫答案正確的解決方案,我會給它一個綠色的記號 – CoreCode 2012-04-19 03:56:51

2

NSNumberFormatter正是你要找的。 (如果你不使用Mac,我會道歉,稍後我會發佈一個鏈接到類似的iOS文檔)。 (請求):NSNumberFormatter事實上適用於iOS(我上面發佈的文檔對於iOS來說是相同的),並且有幾個相關屬性應該設置。首先,它的numberStyle屬性應該設置爲NSNumberFormatterDecimalStyle(其他包括百分比,銀行家和拼寫)。 NSNumberFormatter還包含一個roundingMode屬性,在你的情況下它應該是NSNumberFormatterRoundHalfEven。這會改變你的小數點,使最後一個數字四捨五入,但這是擺脫這些零點的最好方法。

+0

是的,我正在使用IOS設備。你能提供一個重寫,所以我可以知道如何實現它? – CoreCode 2012-04-19 03:59:48

+0

我發現了一種方法,使用%g而不是%f%f – CoreCode 2012-04-19 04:02:30

+0

%g和%f表示同樣的事情。與%e一起,我甚至認爲%EE。 – CodaFi 2012-04-19 04:07:33