неправильный десятичный разделитель с NSDecimalNumber в iOS

Я попытался вывести описание десятичного числа с правильным десятичным разделителем следующим образом:

NSString* strValue = @"9.94300";
NSDecimalNumber* decimalNumber = [NSDecimalNumber decimalNumberWithString: strValue];    
NSLocale* locale = [NSLocale currentLocale];
NSLog(@"%@", [locale localeIdentifier]);
NSLog(@"%@", [decimalNumber descriptionWithLocale: locale] );

Результат:

de_DE
9.943

Десятичный разделитель должен быть ',' вместо '.' для этой локали. Где ошибка? Как я могу вывести правильный десятичный разделитель в зависимости от локального?


person Waterman    schedule 01.02.2012    source источник
comment
посмотрите на этот stackoverflow.com/a/3949169/641062   -  person Vignesh    schedule 01.02.2012
comment
Очень загадочно. Я предполагаю, что вы используете iOS 5 (где я мог бы воспроизвести это)? В эмуляторе 4.3 код работает нормально и выводит 9943, как и ожидалось. Это может быть даже баг...   -  person Dennis Bliefernicht    schedule 01.02.2012
comment
Дополнение: NSNumber работает правильно, а NSDecimalNumber - нет на iOS 5. Подача отчета об ошибке сейчас ;-) [может быть, NSNumber - альтернатива для вас?]   -  person Dennis Bliefernicht    schedule 01.02.2012


Ответы (2)


@TriPhoenix: Да, у меня iOS 5.

@Vignesh: Большое спасибо. Следующий код теперь работает, если я установил немецкий язык iPhone:

NSString* strValue = @"9.94300";
NSDecimalNumber* decimalNumber = [NSDecimalNumber decimalNumberWithString: strValue];    
NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
NSLog(@"%@", [numberFormatter stringFromNumber: decimalNumber] );

Результат: 9 943

Но теперь у меня другая проблема. Если я переключу язык iPhone обратно на английский, вывод по-прежнему будет 9943 вместо 9,943. Я делаю что-то не так?

person Waterman    schedule 02.02.2012
comment
Кто-нибудь, кто может помочь, пожалуйста? - person Waterman; 03.02.2012
comment
Вы хотите установить региональные настройки на немецкий язык, чтобы получить запятую, а не язык - person Olaf; 03.02.2012
comment
Я хочу вывести десятичный разделитель числа в зависимости от языка iPhone, т. Е. «9943», если для iPhone установлен немецкий язык, «9,943», если для iPhone установлен английский язык. - person Waterman; 03.02.2012
comment
В iPhone есть две настройки: региональные настройки управляют форматом даты и числа. Язык контролирует, какие слова используются. - person Olaf; 03.02.2012
comment
Это решило это. Извините, я новичок в iPhone и не заметил эту вторую настройку. Большое спасибо, Олаф. - person Waterman; 06.02.2012

Вы можете использовать это:

NSLocale *locale = [NSLocale currentLocale];

float r = 50/100;

NSString *str = [NSString stringWithFormat:@"%.2f%%", r];
str = [str stringByReplacingOccurrencesOfString:@"." withString:[locale objectForKey: NSLocaleDecimalSeparator]];

Это сработало!

person Mike    schedule 06.08.2012
comment
Чтобы улучшить качество вашего ответа, укажите, как и почему ваш пост решит проблему. - person Mick MacCallum; 06.10.2012