如何格式化一个数字,总是有一个小数位?

时间:2010-09-27 20:43:44

标签: iphone nsnumberformatter

例如,我有浮动值,如:

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无法做到的吗?

3 个答案:

答案 0 :(得分:2)

  

<强> setAlwaysShowsDecimalSeparator:   控制接收器是否始终显示小数分隔符,即使对于整数也是如此。

尝试将此设置为YES

答案 1 :(得分:1)

试试这个吗?

NSString * f = [NSString stringWithFormat:@“%。01f”,(float)10];

答案 2 :(得分: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);