如何解决如何在 swift 中使用 var NumberFollowers = 12458 显示 12,4K?
如何在 swift 中使用变量 NumberFollowers = 12458 显示 12,4K?
显示的数字 (12,4K) 应在 NumberFollower 更改值后立即更改值。
示例:如果 NumberFollowers 等于 45875,则显示的数字必须等于 45,8K
PS:12,4K 逗号有问题。
这是我想要显示的:
1234 -> 1 234
12345 -> 12,3K
123456 -> 123K
1234567 -> 1,2M
12345678 -> 12,3M
123456789 -> 123M
这是我所拥有的
if NumberFollowers > 999999 {
NumberFollowersLabel.text = "\(NumberFollowers/1000000) M"
} else if NumberFollowers > 9999 {
NumberFollowersLabel.text = "\(NumberFollowers/1000) K"
} else {
NumberFollowersLabel.text = "\(NumberFollowers)"
}
这是我的代码显示的内容
1234 -> 1 234
12345 -> 12K
123456 -> 123K
1234567 -> 1M
12345678 -> 12M
123456789 -> 123M
解决方法
这是一种方法 - 基于您显示的值格式化方式:
func formatNumber(_ i: Int) -> String {
let nf = NumberFormatter()
nf.usesGroupingSeparator = true
nf.numberStyle = .decimal
var newNum: Double = 0
var numDec: Int = 0
var sPost: String = ""
switch i {
case 0..<10_000:
newNum = Double(i)
case 10_000..<100_000:
newNum = Double(i) / 1_000.0
numDec = 1
sPost = "K"
case 100_000..<1_000_000:
newNum = Double(i) / 1_000.0
sPost = "K"
case 1_000_000..<100_000_000:
newNum = Double(i) / 1_000_000.0
numDec = 1
sPost = "M"
default:
newNum = Double(i) / 1_000_000.0
sPost = "M"
}
nf.maximumFractionDigits = numDec
return (nf.string(for: newNum) ?? "0") + sPost
}
检查:
let a: [Int] = [
1234,12345,123456,1234567,12345678,123456789
]
a.forEach { n in
print(formatNumber(n))
}
千位和小数分隔符将基于区域设置的默认值。
因此,使用美国语言环境的调试输出是:
1,234
12.3K
123K
1.2M
12.3M
123M
例如,使用德国语言环境:
1.234
12,3K
123K
1,2M
12,3M
123M
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。