条件NSNumberFormatterCurrencyStyle处理

时间:2012-09-02 15:24:08

标签: iphone objective-c nsnumberformatter

我有两种货币价值:£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。

仅为largeValue实现[formatter setMaximumFractionDigits: 0];的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

答案取决于您的格式要求,但我认为一个好的启发式方法是在数字显示千位分隔符时砍掉小数位数:

if ([[job value2] doubleValue] >= 1000.0) {
    [formatter setMaximumFractionDigits: 0];
}