Ale*_*nko 0 string string-formatting swift
我试图将int格式化为格式化字符串,如23 - >"0023",100 - > 0100等等.我已经完成了下面的功能,但它吃了10的倍数的每个数字的最后一个数字,比如900变成090而不是0900.请帮我修复那个bug,谢谢.
func convert(_ score: Int) -> String {
return String(Float(score) / 1000.0).components(separatedBy: ".").joined()
}
Run Code Online (Sandbox Code Playgroud)
除以1000并依赖某个浮点表示是脆弱的,这是一个坏主意.一个简单的解决方案是使用%ld至少4位数的格式:
func convert(_ score: Int) -> String {
return String(format: "%04ld", score)
}
print(convert(23)) // 0023
Run Code Online (Sandbox Code Playgroud)
您可以使用a NumberFormatter并设置minimumIntegerDigits为4来实现目标.
let nf = NumberFormatter()
nf.minimumIntegerDigits = 4
nf.locale = Locale(identifier: "en_US_POSIX") // Avoid thousands separator
nf.string(for: 23) //"0023"
nf.string(for: 90) //"0900"
Run Code Online (Sandbox Code Playgroud)
出于性能原因,您应该避免NumberFormatter每次需要时重新创建实例,而是在范围中定义它(即通过使其成为相关类的实例/静态属性),以便可以重用它.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |