Условная обработка 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];
}
Другие вопросы по тегам