Как получить десятичный символ? - PullRequest
10 голосов
/ 22 марта 2011

Я хочу получить десятичный символ, установленный на устройстве.До сих пор я использовал этот метод:

NSString *decimalSymbol;     
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];    
[f setNumberStyle:NSNumberFormatterDecimalStyle];   
[f setMinimumFractionDigits:2];     
[f setMaximumFractionDigits:2];     
[f setGroupingSeparator:@" "];      

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];    
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];   
[formatter setMinimumFractionDigits:2];     
[formatter setMaximumFractionDigits:2];     
[formatter setGroupingSeparator:@" "];      

NSRange range = {1,1};  

decimalSymbol = [[formatter stringFromNumber:[f numberFromString:[@"" stringByAppendingFormat:@"%.02f", 1.0f]]] substringWithRange:range];  

[formatter release];    
[f release];

Он работал нормально до сих пор, когда я тестирую на другом устройстве (4.3) - возвращается null.В чем может быть проблема?

Есть ли другой способ получить десятичный символ?

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ:
Я могу использовать:

decimalSymbol = [[@"" stringByAppendingFormat:@"%.02f", 1.0f] substringWithRange:range];

, но почемуиначе это не работает на этом конкретном устройстве?

Ответы [ 5 ]

30 голосов
/ 23 марта 2011
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
NSString *decimalSymbol = [formatter decimalSeparator];
21 голосов
/ 24 ноября 2014

Лучший способ - получить десятичный разделитель из текущей локали без инициализации какого-либо объекта NSNumberFormatter. Как это:

[[NSLocale currentLocale] objectForKey:NSLocaleDecimalSeparator]
5 голосов
/ 30 августа 2018

Swift 4 версия:

Locale.current.decimalSeparator
5 голосов
/ 31 июля 2017

Swift 4

Вы можете использовать Locale.current.decimalSeparator или NSLocale.current.decimalSeparator.

Перекрытие Swift для платформы Foundation обеспечивает локаль структура, которая соединяется с классом NSLocale.

и

используйте NSLocale, когда вам нужна ссылочная семантика или другое Основополагающее поведение.

NSLocale Apple Doc

2 голосов
/ 23 марта 2011

DecimalSeparator

Возвращает строку, содержащую символ, который получатель использует для представления десятичных разделителей.

- (NSString *)decimalSeparator

Пример:

decimalSymbol = [f decimalSeparator];

...