NSNumberFormatter отличается на устройстве и симуляторе

У меня есть UITextField, используя этот код, напечатайте значение на этикетке внизу и отформатируйте его.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setUsesGroupingSeparator:NO];
[formatter setMaximumFractionDigits:2];
[formatter setMinimumFractionDigits:2];
NSNumber *calcolo = [NSNumber numberWithDouble:[value1 doubleValue]-[self.textfield.text doubleValue]];
formattedString = [formatter stringFromNumber:calcolo];
self.label.text = formattedString;

На симуляторе (США) значение отображается правильно. На устройстве (IT) на клавиатуре есть запятая, но значение после запятой всегда равно нулю. введите здесь описание изображения

РЕДАКТИРОВАТЬ: это работает

NSNumber *temporaryValue1 = [formatter numberFromString:[NSString stringWithFormat:@"%@",value1]];
NSNumber *temporaryTextField = [formatter numberFromString:self.textField.text];
NSNumber *calcolo = [NSNumber numberWithFloat:([temporaryValue1 floatValue] - [temporaryTextField floatValue])];
formattedString = [formatter stringFromNumber:calcolo];

person Vins    schedule 17.02.2013    source источник
comment
вместо setDecimalStyle и установки количества цифр и т.д. попробуйте [numberFormatter setPositiveFormat:@###0.##];   -  person Rachel Gallen    schedule 17.02.2013


Ответы (1)


Я не думаю, что проблема в вашем выходе. Проблема заключается в информации, которую вы получаете от -[NSString doubleValue]. Этот метод не учитывает языковой стандарт пользователя.

Вы должны быть в состоянии использовать средство форматирования, которое вы сделали, чтобы преобразовать self.textField.text в число, правильно соответствующее локали. Или вы можете рассмотреть возможность использования NSDecimalNumbers, особенно если это валюта (выглядит так?). Затем у NSDecimalNumber есть метод +decimalNumberWithString, который также делает то, что вам нужно.

person Firoze Lafeer    schedule 17.02.2013
comment
@Vins Это то, что я сказал сделать в своем ответе на ваш предыдущий вопрос: stackoverflow.com/questions/14913269/ - person rmaddy; 17.02.2013
comment
@rmaddy да, на самом деле я выслушал твое предложение :) - person Vins; 17.02.2013