将Int转换为格式化字符串(Swift)

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)

Mar*_*n R 7

除以1000并依赖某个浮点表示是脆弱的,这是一个坏主意.一个简单的解决方案是使用%ld至少4位数的格式:

func convert(_ score: Int) -> String {
    return String(format: "%04ld", score)
}

print(convert(23)) // 0023
Run Code Online (Sandbox Code Playgroud)


Dáv*_*tor 6

您可以使用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每次需要时重新创建实例,而是在范围中定义它(即通过使其成为相关类的实例/静态属性),以便可以重用它.

  • 你打败了我.我总是觉得提醒人们Apple的`Formatter`类很难创建很重要,所以请确保为同一目的重用同一个类而不是每次重新创建它们. (3认同)
  • 请注意 - 根据区域设置 - 这可以添加千位分隔符,即"0,023",因此可能应该将区域设置设置为en_US_POSIX. (2认同)