我正在尝试编写一个函数来向K和M提供数千和数百万
例如: @H_403_3@1000 = 1k 1100 = 1.1k 15000 = 15k 115000 = 115k 1000000 = 1m
例如: @H_403_3@1000 = 1k 1100 = 1.1k 15000 = 15k 115000 = 115k 1000000 = 1m
这是我到目前为止的地方:
@H_403_3@func formatPoints(num: Int) -> String { let newNum = String(num / 1000) var newNumString = "\(num)" if num > 1000 && num < 1000000 { newNumString = "\(newNum)k" } else if num > 1000000 { newNumString = "\(newNum)m" } return newNumString } formatPoints(51100) // THIS RETURNS 51K instead of 51.1K如何让这个功能起作用,我缺少什么?
解决方法
@H_403_3@func formatPoints(num: Double) ->String{
let thousandNum = num/1000
let millionNum = num/1000000
if num >= 1000 && num < 1000000{
if(floor(thousandNum) == thousandNum){
return("\(Int(thousandNum))k")
}
return("\(thousandNum.roundToPlaces(1))k")
}
if num > 1000000{
if(floor(millionNum) == millionNum){
return("\(Int(thousandNum))k")
}
return ("\(millionNum.roundToPlaces(1))M")
}
else{
if(floor(num) == num){
return ("\(Int(num))")
}
return ("\(num)")
}
}
extension Double {
/// Rounds the double to decimal places value
func roundToPlaces(places:Int) -> Double {
let divisor = pow(10.0,Double(places))
return round(self * divisor) / divisor
}
}
如果数字是完整的,更新的代码现在应该不返回.0.现在应该输出1k而不是1.0k.我只是检查了双倍和它的地板是否相同.
我在这个问题中找到了双重扩展:
Rounding a double value to x number of decimal places in swift