索引超出函数的范围,将大数字转换为带后缀的数字(百万、十亿......



我是一名新程序员,正在为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
}

当我进行转换时,我总是收到"索引超出范围"错误。

我已经为此尝试了许多不同的搜索,但直到现在还没有答案。

谁能看一看?非常感谢您的帮助。

你必须解决边缘情况:

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)"
}

最新更新