NSNumberFormatter неправильно форматирует

Я работаю над простым приложением, для которого требуется NSNumberFormatter. Я пытаюсь получить число, округленное до 2 знаков после запятой, с помощью следующего кода:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.formatterBehavior = NSNumberFormatterBehaviorDefault;
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.usesSignificantDigits = NO;

formatter.maximumFractionDigits = 2;
NSLog(@"%@",[formatter numberFromString:@"123.12345"]);

Однако вывод журнала выглядит следующим образом:

123.12345

Я совершенно озадачен тем, почему это происходит.


person Jian Jie    schedule 21.05.2014    source источник


Ответы (1)


NSNumber *num = [formatter numberFromString:@"123.12345"];
NSLog(@"num: %@", num);

Это создало NSNumber из строкового значения. NSNumber не имеет форматирования, только значение. NSNumber можно было создать разными способами, например, @123.12345.

Теперь создайте NSString с желаемым форматированием из NSNumber:

NSString *strNum = [formatter stringFromNumber:@123.12345];
NSLog(@"strNum: %@", strNum);

Выход NSLog:

номер: 123.12345
номер_строки: 123.12

person zaph    schedule 21.05.2014
comment
Спасибо! Это сработало. Однако, скажем, если я хочу отформатировать число, но оставить его числом, рекомендуется ли мне сделать myNumber = [formatter numberFromString:[formatter stringFromNumber:myNumber]];? - person Jian Jie; 21.05.2014
comment
NSNumbers не имеют формата отображения, они представляют собой просто числовые значения с плавающей запятой или целые числа — мы даже не знаем, как они сохраняются внутри. Каждый раз, когда вы хотите отобразить NSNu,her, используйте NSNumberFormatter, если вам нужно больше форматирования, которое обеспечивает stringWithFormat:. - person zaph; 21.05.2014