【问题标题】:Incorrect behavior of NSNumberFormatter for iOS 8iOS 8 的 NSNumberFormatter 行为不正确
【发布时间】:2014-10-01 16:13:46
【问题描述】:

以下代码在 iOS 7 之前输出正确的值

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setPositiveFormat:@"0.000%;0.000%;-0.000%"];
    NSString *str = [numberFormatter stringFromNumber:@0.55368]; 

它将str 输出为55.368%

但在 iOS 8 中,它会将 str 输出为 1

我在 Apple 的 NSNumberFormatter 文档中没有看到任何弃用或任何 API 更改。这是一个严重的错误还是我在这里遗漏了什么?

【问题讨论】:

    标签: ios objective-c nsnumberformatter


    【解决方案1】:

    这适用于 iOS7 和 iOS8:

    numberFormatter.numberStyle = NSNumberFormatterPercentStyle;
    numberFormatter.minimumFractionDigits = 3;
    

    【讨论】:

      【解决方案2】:

      这可能是一个意外 - 你应该一直使用setFormatNSNumberFormatters 不支持),它支持这样的三重规范,; 分隔项目。

      您应该使用:setNegativeFormatsetPositiveFormat 与单个项目,例如

      NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
      [numberFormatter setNegativeFormat:@"-0.000%"];
      [numberFormatter setPositiveFormat:@"0.000%;0.000%;-0.000%"];
      NSString *str = [numberFormatter stringFromNumber:@0.55368];
      

      【讨论】:

        【解决方案3】:

        Evol,我 2 周前跑过同样的问题,然后我意识到这只是添加的问题

        [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
        

        这应该适合你。告诉我。

        更新:

        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
        [numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
        
        //[numberFormatter setPositiveFormat:@"0.000%;0.000%;-0.000%"];
        NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
        [numberFormatter setLocale:usLocale];
        [numberFormatter setMinimumFractionDigits:3];
        NSString *str = [numberFormatter stringFromNumber:@0.55368];
        

        【讨论】:

        • 但这并不能解决我的问题。我期待一种带有 3 个小数位的百分比格式。您建议的 API 返回 0.55368
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        相关资源
        最近更新 更多