2012-03-23 81 views
6

我想使它成爲我的一個UILabels只顯示最多3位數字。所以,如果相關的值是3.224789,我希望看到3.22。如果值是12.563,我希望看到12.5,如果值是298.38912,那麼我想看到298.我一直在嘗試使用NSNumberFormatter來完成此操作,但是當我將最大有效位數設置爲3小數點後面總是有3位數字。這裏的代碼:NSNumberFormatter最多顯示3位數

NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[distanceFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[distanceFormatter setAlwaysShowsDecimalSeparator:NO]; 
[distanceFormatter setMaximumSignificantDigits:3]; 

我一直以爲'有效數字'是指小數點前後的所有數字。無論如何,有沒有辦法使用NSNumberFormatter完成此操作?

謝謝!

回答

10

我相信

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.usesSignificantDigits = YES; 
formatter.maximumSignificantDigits = 3; 

將完全按照您的要求進行操作,即始終顯示3位數字,小數點後2位,小數點前1位,小數點前1位,後2位。

+1

是的,這個效果很好。將'usesSignificantDigits'標誌設置爲YES是OP解決方案的關鍵。我只是用這個,實際上它在小數點上起作用,例如它將19.17美元轉換爲19.20美元。 – 2015-06-03 15:35:51

+0

請檢查我的問題http://stackoverflow.com/questions/35112206/how-to-show-only-first-two-numbers-in-nsnumberformatter。它在Swift中不適合我 – Alexander 2016-01-31 14:56:24

2

繼承人的一個小功能我寫道:

int nDigits(double n) 
{ 
    n = fabs(n); 
    int nDigits = 0; 
    while (n > 1) { 
     n /= 10; 
     nDigits++; 
    } 

    return nDigits; 
} 

NSString *formatNumber(NSNumber *number, int sigFigures) 
{ 
    double num = [number doubleValue]; 
    int numDigits = nDigits(num); 

    NSString *format = [NSString stringWithFormat:@"%%%i.%ilf", sigFigures -= numDigits, sigFigures]; 

    return [NSString stringWithFormat:format, num]; 
} 

在我的測試,這工作得很好。

+0

感謝您理解這個問題。 「有效位數」與「小數點右側的位數」有差異。 – 2012-12-17 20:56:44

4

也許你還可以設置(不知道雖然):

[distanceFormatter setUsesSignificantDigits: YES];

但在你的情況下,它可能更容易,只需使用標準的字符串格式化:

CGFloat yourNumber = ...; 
NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber]; 

(注:這將圍繞最後一位數字)