Какой аргумент языкового стандарта передать NSDecimalNumber + decimalNumberWithString: locale: чтобы он всегда работал с NSString, используя десятичный знак точки (.)?

У меня есть 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?


ОБНОВЛЕНИЕ 1: ] Похоже, что это работает хорошо и более четко:

NSDictionary    *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];

NSLocaleDecimalSeparator - это константа, определенная для NSLocale, которая отвечает на -objectWithKey: , точно так же, как NSDictionary. Вы можете использовать любой разделитель десятичных знаков, например @ "," .

Я думаю, что это, вероятно, лучший ответ на вопрос, если у кого-то есть идея получше?

7
задан chown 18 November 2011 в 01:27
поделиться