NSNumberFormatter故障

时间:2015-04-19 18:29:18

标签: ios iphone localization nsnumberformatter

我有一个奇怪的问题。它似乎只出现在测试人员的iPhone 5s上。 它可以在iPhone 5,6和6上正常运行,全部运行最新的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;
}

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

通常会像这样正确显示 enter image description here
但是在这款iPhone 5s上它显示的是这样的 enter image description here

我认为setMaximumSignificantDigits会把它扼杀在萌芽状态,但它仍然显示出相同的效果。这可能是一些奇怪的本地化事情吗?我不认为它也正如他的iPhone 6所显示的那样 由于
路加

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  

某些区域设置允许为较大的数字指定另一个分组大小。例如,某些区域设置可能代表61,242,378.46(如美国)中的数字为6,12,42,378.46。在这种情况下,辅助分组大小(覆盖小数点最远的数字组)为2。

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