格式化2位小数(NSDecimalNumber)

时间:2017-01-06 20:22:07

标签: ios swift uicollectionview swift3 number-formatting

我的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。为什么会这样?它是如何解决的?

1 个答案:

答案 0 :(得分:3)

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

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

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