我有一个关于添加千分隔符的问题.
我有三种类型的数字字符串.
我在这里找到答案.
但我尝试使用它,并没有添加千分隔符.
对我有任何想法吗?谢谢.
let str = "1000"
let string1 = "5000.000"
let string2 = "2000.0"
let convertStr = str.formattedWithSeparator //in playground, get error ?Value of type 'String' has no member 'formattedWithSeparator'?.
let convertStr1 = Float(string1)!.formattedWithSeparator //get error too.
let convertStr2 = Float(string2)!.formattedWithSeparator //get error too.
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.groupingSeparator = ","
formatter.numberStyle = .decimal
return formatter
}()
}
extension BinaryInteger {
var formattedWithSeparator: String {
return Formatter.withSeparator.string(for: self) ?? ""
}
}
Run Code Online (Sandbox Code Playgroud)
数字格式化程序不以"数字字符串"开头; 他们从一个数字开始.因此,例如,使用您已经拥有的Formatter扩展代码:
let n = 5000
let s = Formatter.withSeparator.string(for: n)
// s is now "5,000"
Run Code Online (Sandbox Code Playgroud)
但是,让我们说你真正开始的是一个字符串.然后你可以说,例如:
let str = "5000"
let s = Formatter.withSeparator.string(for: Float(str)!)
// s is now "5,000"
Run Code Online (Sandbox Code Playgroud)
注意在此过程中丢失了小数信息.如果这对您很重要,则需要将该要求添加到格式化程序本身.您正在创建一个字符串,您必须提供有关您希望该字符串的外观的所有信息.例如:
let str = "5000.00"
let f = Formatter.withSeparator
f.minimumFractionDigits = 2
let s = f.string(for: Float(str)!)
// s is now "5,000.00"
Run Code Online (Sandbox Code Playgroud)
如果省略mimimumFractionDigits信息,你会"5,000"再次获得; 我们开始使用的字符串的原始外观完全不重要.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |