Int
沒有一個初始化服用Decimal
,所以你不能轉換到Decimal
直接Int
與初始化語法像Int(...)
。
您可以使用pow(Decimal, Int)
這樣的:
let lootBase = Int(pow((Decimal(level + 1)), 3) * 2 as NSDecimalNumber)
let lootMod = Int(pow(Decimal(level), 2) * 2 as NSDecimalNumber)
let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod
否則,您可以使用pow(Double, Double)
這樣的:
let lootBase = Int(pow((Double(level + 1)), 3) * 2)
let lootMod = Int(pow(Double(level), 2) * 2)
let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod
但是,如果你只計算一個整數值的功率爲2或3, pow(Decimal, Int)
和pow(Double, Double)
都遠沒有效率。
可以宣佈一個簡單的功能,如squared
或cubed
這樣的:
func squared(_ val: Int) -> Int {return val * val}
func cubed(_ val: Int) -> Int {return val * val * val}
,而是使用他們的pow(..., 2)
或pow(..., 3)
:(假設level
是Int
)
let lootBase = cubed(level + 1) * 2
let lootMod = squared(level) * 2
let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod