首页 > 解决方案 > 如何在 Swift 中返回 0 而不是 Nan?

问题描述

let need = (Singleton.shared.getTotalExpense(category: .need) / Singleton.shared.getTotalIncome()) * 100
      needsLabel.text = "" + String(format: "%.f%%", need)

如果总费用和总收入都为零,我不希望返回 NaN。如果需要= Nan,我该怎么做,它返回0

标签: iosswiftiphonexcodenan

解决方案


您需要有条件地检查分子和分母是否都为零,这是导致 的原因之一NaN,并有条件地将零分配给结果。

let expenses = Singleton.shared.getTotalExpense(category: .need)
let income = Singleton.shared.getTotalIncome()

let need = expenses == 0 && income == 0 ? 0.0 : expenses / income * 100

您还可以检查除法的结果是否为NaN(可能是任何操作数为NaN):

let ratio = expenses / income * 100
let need = ratio.isNaN ? 0.0 : ratio

请注意,您可能还需要处理将非零除以零的情况 - 这将导致Inf- 这完全取决于您的用例:

if ratio.isInfinite {
  // do something else, like throw an exception
}

推荐阅读