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")
如果太大,这个数字是四舍五入的。有人知道怎么解决这个问题吗?
发布于 2020-05-26 01:52:13
如果您需要15位以上的精度,您可以使用Swift十进制类型。顺便说一句,在创建您的十进制值时,您应该使用它的字符串初始化程序,并创建一个静态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"
https://stackoverflow.com/questions/62012731
复制相似问题