首页 > 解决方案 > Swift 扩展和 NumberFormatters 的问题

问题描述

我正在尝试格式化标签的文本字段,使其文本仅打印具有一定数量有效数字的值。我正在使用 Swift 和NumberFormatter类的扩展功能,但是,虽然代码正确地符合没有错误,但我想要的功能(即最多 6 个有效数字)没有被实现。

这是我的扩展代码:

extension Double {
    func formatNumbers() -> String {
        let numberFormat = NumberFormatter()
        let number = NSNumber(value: self)
        numberFormat.usesSignificantDigits = true
        numberFormat.minimumFractionDigits = 0
        return String(numberFormat.string(from: number) ?? "")
    }

}

这是我调用扩展方法的时候:

ConsoleValue.text! = "\(tempResult.formatNumbers())"

其中ConsoleValueUILabeltempResultDouble var

有人可以帮我解决我做错的事情吗?

标签: iosswiftnumbersformatter

解决方案


要设置有效数字的最大数量,请使用maximumSignificantDigits属性:

numberFormat.maximumSignificantDigits = 6

根据这篇维基百科文章,重要数字是:

  • 所有非零数字都很重要:1、2、3、4、5、6、7、8、9。
  • 非零数字之间的零很重要:102、2005、50009。
  • 前导零从不重要:0.02、001.887、0.000515。
  • 在带小数点的数字中,尾随零(最后一个非零数字右侧的零)很重要:2.02000、5.400、57.5400。
  • 在没有小数点的数字中,尾随零可能有意义,也可能不重要。需要通过附加图形符号或有关错误的明确信息来获得更多信息,以阐明尾随零的重要性。

推荐阅读