我是一名新的程序员,为iOS构建我的第一个增量游戏。我写了一个小函数来将我的大数字转换为带后缀的较小数字。
func numberConverter(_ number: Double) -> String {
let intermediate = floor(log10(number)/3)
let numberSuffix: [String] = ["K", "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "Oc", "No", "Dc", "UDc", "DDc", "TDc", "QaDc"]
let convertedNumber: String = "\(round(number / pow(10.0, intermediate * 3.0) * 1000) / 1000) \(numberSuffix[Int(intermediate) - 1])"
return convertedNumber
}
当我进行转换时,我总是得到“索引超出范围”错误。
我已经尝试了很多不同的搜索,但直到现在还没有答案。
任何人都可以看看吗?非常感谢你的帮助。
答案 0 :(得分:0)
你必须解决边缘情况:
func numberConverter(_ number: Double) -> String {
let numIntegerDigits: Int
// for smaller numbers than the log10 won't really make sense
// adding the abs(...) fixes handling of negative values
if abs(number) < 1 {
numIntegerDigits = 0
} else {
numIntegerDigits = Int(floor(log10(abs(number))))
}
let unitIndex = numIntegerDigits / 3
let numberSuffixes: [String] = ["K", "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "Oc", "No", "Dc", "UDc", "DDc", "TDc", "QaDc"]
// you have to solve the case when there is no unit (all values < 1000)
guard unitIndex > 0 else {
return String(number)
}
let scaledNumber = round(number / pow(10.0, Double(numIntegerDigits)) * 1000) / 1000
let unitSuffix = numberSuffixes[unitIndex - 1]
return "\(scaledNumber) \(unitSuffix)"
}