Swift等同于isnan()?

Alb*_*ini 57 cocoa nan swift

哪个相当于isnan()Swift?我需要检查一些操作结果是否有效并删除那些无效的x/0谢谢

Mic*_*lum 116

它在FloatingPointNumber协议中定义,FloatDouble类型都符合.用法如下:

let d = 3.0
let isNan = d.isNaN // False

let d = Double.NaN
let isNan = d.isNaN // True
Run Code Online (Sandbox Code Playgroud)

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

虽然您应该更喜欢使用aVariable.isNaN来确定值是否为NaN.


作为一个侧面说明,如果您不太确定要使用的值的分类,则可以切换FloatingPointNumber符合类型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)
}
Run Code Online (Sandbox Code Playgroud)

其值在FloatingPointClassification枚举中声明.


Lan*_*ria 7

接受的答案有效,但当我第一次看到它时,由于这个例子,我不太清楚,而且我不知道 NaN 是 的缩写"not a number"

这是苹果公司的一个例子,供不清楚的人参考:

在此输入图像描述

let x = 0.0
let y = x * .infinity // y is a NaN because .infinity is not a number

if y.isNan {

    print("this is NaN") // this will print
} else {

    print("this isn't Nan")
}
Run Code Online (Sandbox Code Playgroud)