Swift - NumberFormatter - PullRequest
0 голосов
/ 26 мая 2020

Numbeformatter

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")

Число округляется, если оно слишком велико. Кто-нибудь знает как это решить?

1 Ответ

0 голосов
/ 26 мая 2020

Если вам нужна точность более 15 цифр, вы можете использовать тип Swift Decimal. Кстати, вы должны использовать его строковый инициализатор при создании вашего Decimal значения и создать stati c 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"
...