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"
数字格式化程序
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"