Swift- NumberFormatter

Swift- NumberFormatter

数字格式化程序

extension Double {
    var formatedPrice: String? {
        let formatter = NumberFormatter()
        formatter.locale = Locale(identifier: "ja_JP")
        formatter.numberStyle = .decimal
        if let formatedString = formatter.string(from: self as NSNumber) {
            return formatedString 
        } 
        return nil
    }
}

print(Double(12_121_212_121_212_121_212).formatedPrice)

这是结果:

Optional("¥12,121,212,121,212,100,000")

数字太大会四舍五入。有谁知道如何解决这个问题?

如果您需要超过 15 位的精度,您可以使用 Swift 十进制类型。顺便说一句,您应该在创建 Decimal 值时使用它的字符串初始值设定项,并创建一个静态 NumberFormatter 以避免每次调用此 属性:

时都创建一个新的
extension Decimal {
    var formatedPrice: String? {
        Decimal.formatter.string(for: self)
    }
    static let formatter: NumberFormatter = {
        let formatter = NumberFormatter()
        formatter.locale = Locale(identifier: "ja_JP")
        formatter.numberStyle = .currency
        return formatter
    }()
}

用法:

Decimal(string: "12121212121212121987")?.formatedPrice   // "¥12,121,212,121,212,121,987"