哪个是isnan()的Swift等价物?

在Swift中, isnan()是等价的吗? 我需要检查一些操作结果是否有效,并删除像x / 0那样的无效谢谢

它在FloatingPointNumber协议中定义, Float和Doubletypes都符合。 用法如下:

 let d = 3.0 let isNan = d.isNaN // False let d = Double.NaN let isNan = d.isNaN // True 

如果你正在寻找一种方法来做这个检查自己,你可以。 IEEE定义NaN!= NaN,这意味着您不能直接将NaN与一个数字进行比较,以确定其是否为数字。 但是,你可以检查, maybeNaN != maybeNaN 。 如果这个条件评估为真,你正在处理NaN。

尽pipe您应该更喜欢使用aVariable.isNaN来确定值是否为NaN。


有一点需要注意的是,如果您不太清楚正在使用的值的分类,则可以切换FloatingPointNumber符合types的floatingPointClass属性的值。

 let noClueWhatThisIs: Double = // ... switch noClueWhatThisIs.floatingPointClass { case .SignalingNaN: print(FloatingPointClassification.SignalingNaN) case .QuietNaN: print(FloatingPointClassification.QuietNaN) case .NegativeInfinity: print(FloatingPointClassification.NegativeInfinity) case .NegativeNormal: print(FloatingPointClassification.NegativeNormal) case .NegativeSubnormal: print(FloatingPointClassification.NegativeSubnormal) case .NegativeZero: print(FloatingPointClassification.NegativeZero) case .PositiveZero: print(FloatingPointClassification.PositiveZero) case .PositiveSubnormal: print(FloatingPointClassification.PositiveSubnormal) case .PositiveNormal: print(FloatingPointClassification.PositiveNormal) case .PositiveInfinity: print(FloatingPointClassification.PositiveInfinity) } 

它的值在FloatingPointClassification枚举中声明。