Условная обработка NSNumberFormatterCurrencyStyle
У меня есть две валюты: £2,60 и £ 22 000. Оба хранятся как NSDecimalNumber
в основных данных. Я создаю строку из них, используя следующее:
// The app will be GB only, which is the reason locale is set to en_GB
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setLocale: locale];
[formatter setNumberStyle: NSNumberFormatterCurrencyStyle];
// job is a Core Data entity, value1 and value2 or NSDecimalNumbers
NSString *value1 = [formatter stringFromNumber: [job value1]]; // 2.60
NSString *value2 = [formatter stringFromNumber: [job value2]]; // 22000
NSString *testString = [NSString stringWithFormat:@"%@ and %@", value1, value2];
Это в целом работает нормально, но testString
печатает как £ 2,60 и £ 22 000,00.
Что было бы лучшим способом реализовать [formatter setMaximumFractionDigits: 0];
только для большого значения?
1 ответ
Решение
Ответ зависит от ваших требований к форматированию, но я думаю, что хорошей эвристикой было бы отрубить десятичные цифры, когда число показывает разделитель тысяч:
if ([[job value2] doubleValue] >= 1000.0) {
[formatter setMaximumFractionDigits: 0];
}