NSNumberFormatter 故障

NSNumberFormatter glitch

我有一个奇怪的问题。它似乎只出现在测试人员的 iPhone 5s 上。 它在 iPhone 5、6 和 6 plus 上正常工作,所有 运行 最新的 iOS (8.3)。

这是代码

-(NSString *) commaString:(double)number
{
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
    [numberFormatter setGroupingSize:3];
    [numberFormatter setMaximumSignificantDigits:9];
    NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble: number]];

    return numberAsString;
}

该应用程序是一个计算器,通常会像这样正确显示

通常是这样正确显示的
但是在这个 iPhone 5s 上它是这样显示的

我以为 setMaximumSignificantDigits 会把它扼杀在萌芽状态,但它仍然显示相同。这可能是一些奇怪的本地化事情吗?我不认为这是他的 iPhone 6 它也正确显示。
谢谢
卢克

如果您的目标只是每三个字符有一个逗号,您需要做的就是:

    NSNumberFormatter * numberFormatter = [[NSNumberFormatter alloc] init];
    numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;

    NSNumber * numberFromString = [numberFormatter numberFromString:currentTextWithoutCommas];
    NSString * formattedNumberString = [numberFormatter stringFromNumber:numberFromString];

如果您发现格式化程序本地化存在问题,请将 secondaryGroupingSize 设置为 3。如 NSNumberFormatter 的文档中所写:

Some locales allow the specification of another grouping size for larger numbers. For example, some locales may represent a number such as 61, 242, 378.46 (as in the United States) as 6,12,42,378.46. In this case, the secondary grouping size (covering the groups of digits furthest from the decimal point) is 2.

此外,您可以在 iOSDeveloperTips 上查看 Formatting Numbers 以获得简要的高级概述。