【问题标题】:Formatting with 2 decimal places (NSDecimalNumber)带 2 位小数的格式 (NSDecimalNumber)
【发布时间】:2017-05-21 16:34:16
【问题描述】:

我的 NSDecimalNumber 中有一个扩展名

extension NSDecimalNumber {
    func format(f: String) -> String {
        return String(format: "%\(f)f", self)
    }
}

这应该允许我执行以下操作:

var price = 34.2499999

price.format(f: ".2") // 35.25

相反,我在UICollectionViewCell 中得到 0.00:

func configureCell(_ item: Item) {

        self. item = item

        nameLabel.adjustsFontSizeToFitWidth = true
        priceLabel.adjustsFontSizeToFitWidth = true
        nameLabel.text = self. item.name.capitalized
        priceLabel.text = "£\(self. item.price!.format(f: ".2"))"

    }

我想用显示两位小数而不是随机数的实际价格来格式化它。所有价格均从数据库中检索,准确无误,仅保留 2 位小数。

由于某种原因,当我从扩展名中删除格式时,我得到更多小数点,而我在数据库中只有 2 个。为什么会发生这种情况以及如何解决?

【问题讨论】:

  • 您定义了NSDecimalNumber 的扩展,它不会应用于Double

标签: ios swift uicollectionview swift3 number-formatting


【解决方案1】:

这可能是由于引擎盖下的类型转换。您始终可以使用 NSNumberFormatter 格式化价格,以提供正确的货币格式,而不是像这样使用字符串格式

extension NSNumber {
    func toCurrency() -> String? {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .currency
        return numberFormatter.string(from: self)
    }
}

还记得在调用此扩展方法之前使用您的价格变量初始化NSDecimalNumber

【讨论】:

  • 函数中缺少返回
  • 完美运行,只需要更改货币 :) 谢谢!
  • 这段代码有错误。 numberFormatter.string 返回一个可选的String
  • 感谢@PeterSchorn!我已经更新了代码
  • @cjrieck 没问题。
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
相关资源
最近更新 更多