【问题标题】:NSTextField: integerValue behaving inconsistentlyNSTextField:integerValue 行为不一致
【发布时间】:2019-04-02 12:51:03
【问题描述】:

我发现 [NSTextField integerValue] 对于包含千位分隔符的值的行为不同,具体取决于值的设置方式。

(我在德国,所以在这些示例中我的千位分隔符是一个点“.”)。

  • 如果我调用 [myTextField setIntegerValue:4567],文本字段将包含 4.567(带有 tousands 分隔符),[myTextField integerValue] 返回 4567。

  • 如果我在文本字段中手动键入值 4.567,或使用 [myTextField setStringValue:@"4.567"],则 [myTextField integerValue] 仅返回 4

显然它会停止解析千位分隔符处的数字,即使它在调用 setIntegerValue 时自己插入了这样的分隔符。

所以我实际上有两个问题:

  1. 在使用-setIntegerValue: 时,是否有设置或其他简单的方法可以阻止它格式化数字?
  2. 我可以在调用-integerValue 时“启用”数字解析以理解/接受千位分隔符吗?或者,如果没有,从 NSString 解析带有千位分隔符的数字的最简单方法是什么?

【问题讨论】:

    标签: objective-c macos cocoa nstextfield


    【解决方案1】:

    在情节提要或 XIB 的文本字段中添加数字格式化程序 (NSNumberFormatter)。这使得单元格的内容和文本字段的objectValue 成为NSNumber 而不是NSString

    在使用 -setIntegerValue: 时,是否有设置或其他简单的方法可以阻止它格式化数字?

    关闭格式化程序的分组分隔符。

    我可以在调用 -integerValue 时“启用”数字解析以理解/接受千位分隔符吗?

    打开格式化程序的 Grouping Separator 并将 Primary Grouping 设置为 3。

    或者,如果不是,那么从 NSString 中解析带有千位分隔符的数字的最简单方法是什么?

    使用NSNumberFormatter,查看类参考和Number Formatters

    【讨论】:

      【解决方案2】:

      integerValue 不支持区域设置,它始终使用. 作为小数点。

      您应该改用NSNumberFormatter.numberFromString:

      Link to NSNumberFormatter class reference.

      【讨论】:

        猜你喜欢
        • 2015-08-05
        • 2020-12-21
        • 2013-12-17
        • 2018-08-27
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多