在调试“汇率仓库”App时,发现显示的金额变成了”inf”,查询了一下代码好像也没有这个赋值。
后来了解到inf表示无穷大。可能的报错代码为calculaterReserveAmount 方法中出现了除以零的情况。
// 计算汇率仓库的储备金额
func calculaterReserveAmount() {
// 重新将汇率仓库的储备金额置空,并尝试重新计算
ExchangeRateWarehouseAmount = 0.0
// 轮询常用货币中的各值
for (keys,value) in ExchangeRateWarehousconvertedAmounts {
// 当输入的金额为空时,不进行计算,并将汇率仓库的金额改为空
ExchangeRateWarehouseAmount += value / (ExchangeRateStructInfo.exchangeRates[keys]?.baseRate ?? 0.0)
}
}
在这段代码中出现了除以零的情况:
ExchangeRateWarehouseAmount += value / (ExchangeRateStructInfo.exchangeRates[keys]?.baseRate ?? 0.0)
当baseRate为0.0时,除以零的操作就会导致结果为无穷大。
解决方案为:
if let baseRate = ExchangeRateStructInfo.exchangeRates[keys]?.baseRate, baseRate > 0 {
print("\(value)\(keys)等于\(value) / \(baseRate)")
ExchangeRateWarehouseAmount += value / baseRate
} else {
print("\(keys)的baseRate无效(为0或找不到),跳过此项计算")
}
对该字典进行解包,如果该币种的汇率小于等于0,就跳过,不进行计算。