Quel est l'équivalent de isnan()
in Swift? Je dois vérifier si certains résultats d'opération sont valides et supprimer ceux invalides comme x/0 Merci
Il est défini dans le protocole FloatingPointNumber , auquel les types Float et Double sont conformes. L'utilisation est la suivante:
let d = 3.0
let isNan = d.isNaN // False
let d = Double.NaN
let isNan = d.isNaN // True
Si vous cherchez un moyen de faire ce contrôle vous-même, vous pouvez. IEEE définit que NaN! = NaN, ce qui signifie que vous ne pouvez pas comparer directement NaN à un nombre pour déterminer son is-a-number-ness. Cependant, vous pouvez vérifier que maybeNaN != maybeNaN
. Si cette condition est évaluée comme vraie, vous avez affaire à NaN.
Bien que vous devriez préférer utiliser aVariable.isNaN
pour déterminer si une valeur est NaN.
En guise de remarque, si vous n'êtes pas sûr de la classification de la valeur avec laquelle vous travaillez, vous pouvez basculer sur la valeur de votre propriété FloatingPointNumber
du type conforme 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)
}
Ses valeurs sont déclarées dans l'énumération FloatingPointClassification .
La réponse acceptée fonctionne mais quand je l'ai vue pour la première fois, je n'étais pas exactement clair à cause de l'exemple et je ne savais pas que NaN est un acronyme pour "not a number"
.
Voici un exemple de Apple pour toute personne qui n'est pas claire:
let x = 0.0
let y = x * .infinity // y is a NaN
if y.isNan {
print("this is NaN") // this will print
} else {
print("this isn't Nan")
}