【问题标题】:NSNumberFormatter glitchNSNumberFormatter 故障
【发布时间】:2015-04-19 18:29:18
【问题描述】:

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

这是代码

-(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 一样正确显示。
谢谢
卢克

【问题讨论】:

  • 另外,每个设备的区域设置是什么?
  • 看起来第二张图片的设备与第一台设备的区域设置不同(例如,第二台设备上的印度)。
  • 你的目标是什么?第二个版本不适合用户的语言环境吗?

标签: ios iphone localization nsnumberformatter


【解决方案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 以获得简要的高级概述。

【讨论】:

  • 这个问题提出了关于本地化的想法,这确实解释了在 5s 上看到的数字。我不知道 5s 在本质上会有何不同,从而导致该数字与 6 或 6+ @rmaddy 的显示方式不同
  • 嗯,我认为问题在于两个数字不同,而不仅仅是格式。也许不是。
  • 对不起。问题在于逗号分隔,而不是实际数字。
  • 在您的设备上,@mylogon,您能否通过更改本地化来重现您的测试人员遇到的问题(我猜从其他人的 cmets 来看印度是可行的)?如果是这样,是否更改 secondaryGroupingSize 解决?
  • 我已更改并提交。一旦收到测试人员的反馈,我将返回。谢谢
猜你喜欢
  • 2016-09-09
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多