将 Int 转换为格式化字符串 (Swift)
Convert Int to a formatted string (Swift)
我正在尝试将 int 格式化为格式化字符串,例如 23 -> “0023”、100 -> 0100 等等。我已经完成了下面的函数,但它会吃掉每个 10 的倍数的数字的最后一位,比如 900 变成 090,而不是 0900。
请帮我修复那个错误,谢谢。
func convert(_ score: Int) -> String {
return String(Float(score) / 1000.0).components(separatedBy: ".").joined()
}
您可以使用 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"
出于性能原因,您应该避免每次需要时都重新创建 NumberFormatter
实例,而是在一个范围内定义它(即通过将其设为 instance/static 属性相关 class) 以便可以重复使用。
除以 1000 并依赖于特定的浮点表示形式是脆弱的,并且对于此目的来说不是一个好主意。
一个简单的解决方案是使用最少 4 位数字的 %ld
格式:
func convert(_ score: Int) -> String {
return String(format: "%04ld", score)
}
print(convert(23)) // 0023
我正在尝试将 int 格式化为格式化字符串,例如 23 -> “0023”、100 -> 0100 等等。我已经完成了下面的函数,但它会吃掉每个 10 的倍数的数字的最后一位,比如 900 变成 090,而不是 0900。 请帮我修复那个错误,谢谢。
func convert(_ score: Int) -> String {
return String(Float(score) / 1000.0).components(separatedBy: ".").joined()
}
您可以使用 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"
出于性能原因,您应该避免每次需要时都重新创建 NumberFormatter
实例,而是在一个范围内定义它(即通过将其设为 instance/static 属性相关 class) 以便可以重复使用。
除以 1000 并依赖于特定的浮点表示形式是脆弱的,并且对于此目的来说不是一个好主意。
一个简单的解决方案是使用最少 4 位数字的 %ld
格式:
func convert(_ score: Int) -> String {
return String(format: "%04ld", score)
}
print(convert(23)) // 0023