2010-09-27 57 views
2

例如,我有這樣的浮點值:如何格式化一個數字,使得總是有一個小數位?

0.2 1.5 2.0 3.0 10.0 52.5 60.0

在任何情況下,我確實想要一個小數位。即使數量正好是1,我想爲1.0

我試圖建立一個NSNumberFormatter這樣它可以顯示,但它不工作:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setAlwaysShowsDecimalSeparator:NO]; 
[formatter setAllowsFloats:YES]; 
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
[formatter setMinimumFractionDigits:1]; 

[formatter setUsesSignificantDigits:YES]; 
[formatter setMinimumSignificantDigits:2]; 

[formatter setNumberStyle:kCFNumberFormatterDecimalStyle]; 

它顯示了0.2,5.0, 5.5,9.0,

但是當它達到10時,它將顯示10,10.3,11,11.9,15 ......等等。 這是NSNumberFormatter無法做到的事情嗎?

回答

1

試試這個嗎? NSString * f = [NSString stringWithFormat:@「%。01f」,(float)10]; NSString * f = [NSString stringWithFormat:

+0

這工作得很好!謝謝!但它不會本地化逗號... – openfrog 2010-09-27 21:11:53

+0

不知道我是否理解,但如果你在我們用來逗號的地方。它應該工作得很好。 http://www.cplusplus.com/reference/clibrary/clocale/lconv/ – madmik3 2010-09-28 12:20:12

+0

@openfrog使用'localizedStringWithFormat'來本地化小數分隔符 – JFS 2013-06-21 16:51:10

2

setAlwaysShowsDecimalSeparator: 控制接收器是否始終顯示小數分隔符,即使是整數。

試試設置爲YES

+0

它將強制使用小數點分隔符,但它不能確保總是隻有一個小數分隔符後的數字......它產生的東西像10.或15.但不是10.0或15.5 ...... – openfrog 2010-09-28 07:33:07

0

我不能使用madmi3解決方案的,因爲我需要動態設置NSNumberFormatter的語言環境。

於是結束了使用以下解決方案:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.alwaysShowsDecimalSeparator = YES; // This will produce results like 10. for intergers 
formatter.maximumFractionDigits = 1; 
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"pt"]; // I get this locale dinamically 

NSString *formattedNumber = [formatter stringFromNumber:[NSNumber numberWithInteger:10]]; 

//Check this formattedNumber is ending with the separator 
//If so, then append one more 0. 
if ([formattedNumber hasSuffix:[formatter.locale objectForKey:NSLocaleDecimalSeparator]]) 
{ 
    formattedNumber = [formattedNumber stringByAppendingString:@"0"]; 
} 

NSLog(@"%@", formattedNumber);