Как отформатировать число таким образом, чтобы всегда была одна дробная цифра? - PullRequest
2 голосов
/ 28 сентября 2010

Например, у меня есть значения типа float:

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 ]

2 голосов
/ 28 сентября 2010

setAlwaysShowsDecimalSeparator: Определяет, будет ли получатель всегда отображать десятичный разделитель, даже для целых чисел.

Попробуйте установить значение YES

1 голос
/ 28 сентября 2010

попробуйте это?

NSString * f = [NSString stringWithFormat: @ "%. 01f", (float) 10];

0 голосов
/ 06 декабря 2014

Я не смог использовать решения 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);
...