У меня есть строка NSString, которую я хочу преобразовать в NSDecimalNumber
.Строка получена с сервера и всегда форматируется с использованием языкового стандарта en_US
, например XXX.YYY
, а не XXX,YYY
.Я хочу создать NSDecimalNumber
, который принимает XXX.YYY
независимо от локали пользователя.Число никогда не отображается пользователю, оно используется для внутренней математики.
Обычно вы делаете что-то вроде этого:
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234"];
Однако, если пользователь запускает fr_FR
языковой стандарт Mac OS X, который сломается.en_US
будет интерпретировать это как одна точка два три четыре , где-как fr_FR
будет интерпретировать это как тысяча двести тридцать четыре , оба очень разные числа.
Очевидным решением является использование +decimalNumberWithString:locale:
.Но я не уверен, что передать в качестве аргумента параметру locale:
, который будет работать во всех международных версиях Mac OS X. Лучше всего сделать следующее:
NSLocale *l = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];
лучший способ сделать это, и это безопасно?Будет ли локальный идентификатор @"en_US"
доступен во всех международных версиях Mac OS X или он может возвращать nil
NSLocale в некоторых случаях?
UPDATE 1: Thisкажется, работает хорошо, и является более явным:
NSDictionary *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];
NSLocaleDecimalSeparator
является константой, определенной для NSLocale, которая отвечает на -objectWithKey:
, так же, как NSDictionary.Вы можете использовать любой разделитель десятичных разрядов, например, @","
.
Я думаю, что это, вероятно, лучший ответ на вопрос, разве у кого-то есть идея получше?