2010-09-27 58 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);