Метод NSString doubleValue дает неожиданные результаты - PullRequest
0 голосов
/ 21 сентября 2010

Мне нужно конвертировать NSString в удвоение.Если эта строка по сути целочисленная, то результат в порядке.Если строка десятичная, возможно, также с разделителями групп, тогда результаты будут ложными.Любой король разделителя (будь то "." Или ","), который находится первым в строке, всегда используется в качестве десятичного разделителя.

Я пытался что-то сделать с NSScanner, но я просто не понимаю, как исправитьэта проблема.

Идея состоит в следующем: независимо от того, введу ли я в текстовое поле целое число или десятичное число с разделителем группы или без него, я хочу получить правильное десятичное число.

Я был бы очень рад получить любойпомощь.

Заранее спасибо!

Ответы [ 2 ]

6 голосов
/ 21 сентября 2010

[string doubleValue] и обычный NSScanner всегда использует . в качестве десятичного разделителя.Локализованный NSScanner использует десятичный разделитель из текущей локали.Но оба ничего не знают о группировке символов, поэтому они неуместны.

Вы должны использовать NSNumberFormatter, чтобы сделать это.Лучше всего настроить его в конструкторе интерфейсов, как сказал @Gobra.Но вы также можете сделать это в коде, подобном следующему:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle: NSNumberFormatterDecimalStyle];
double value = [[formatter numberFromString: string] doubleValue];

Если вам нужно знать, действительна ли строка или нет, вы можете проверить, является ли объект NSNumber, возвращаемый numberFromString:, nilпрежде чем отправить сообщение doubleValue.

0 голосов
/ 21 сентября 2010

Поскольку вы упомянули текстовое поле, я предполагаю, что проблема заключается в привязке некоторого числового значения к NSTextField. Правильный способ здесь - использовать NSValueFormatter, в палитре IB есть настраиваемый форматер для чисел. Просто поместите его в текстовое поле и установите правила.

Даже если задача не имеет ничего общего с пользовательским интерфейсом, вы все равно можете использовать [NSValueTransformer valueTransformerForName: aName], чтобы создать преобразованное и преобразовать значение с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...