У меня проблема с текстовым полем. Этот случай отлично работает с английским языком. Однако, если язык устройства изменяется на французский (canada), текстовое поле не показывает значения после десятичного числа.Как получить десятичные значения, когда устройство находится на французском языке с использованием NSNumber?
Для английского:
I enter 99.99 and click Done. The text field display 99.99
Для французского:
I enter 99,99 and click Done . The text field display 99,00
Вот мой код:
_amountField.text = [_amountField currencyFormatFromValue:[NSNumber numberWithDouble:_amountField.text.doubleValue]];
Здесь [NSNumber numberWithDouble:_amountField.text.doubleValue]
часть возвращается 99.99 в случае английского и 99, 00 в случае французского
-(NSString *)currencyFormatFromValue:(NSNumber *)value{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.positiveFormat = @"###.00";
formatter.roundingMode = NSNumberFormatterRoundFloor;
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];
[formatter setGroupingSeparator:groupingSeparator];
[formatter setUsesGroupingSeparator:YES];
[formatter setCurrencySymbol:@""];
[formatter setMinimumIntegerDigits:1];
NSString *formattedValue = [formatter stringFromNumber:value];
return formattedValue;
}
Я не уверен, почему французский текст, который преобразуется в double, заканчивает десятичные значения. Есть идеи?
Должен ли я преобразовать текст обратно на английский язык до того, как я отправил значение в форматтер?
Вы не должны быть настройки любого из свойств чисел форматировщиком кроме стиля. Пусть локаль пользователя определяет все остальное. – rmaddy
Я использовал groupingseparator для разделения сотен и тысяч в общей стоимости. Если я просто использую стиль номера, он не разделяет сотни и тысячи –
Просто используйте 'setUsesGroupingSeparator:', чтобы включить группировку. Вы не должны устанавливать фактический разделитель. – rmaddy