2014-06-22 13 views

cevap

101

Hem Float ve Double türleri uygun FloatingPointNumber protokolü tanımlanan oluyor gibi bu geçersiz silmeniz gerekir. Kullanım şu şekildedir:

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

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

Eğer bu kontrolü kendiniz yapmak için bir yol arıyorsanız, yapabilirsiniz. IEEE, NaN! = NaN'yi tanımlar; yani, bir sayıyı doğrudan belirlemek için NaN ile bir sayıyı doğrudan karşılaştıramazsınız. Bununla birlikte, maybeNaN != maybeNaN'u kontrol edebilirsiniz. Bu koşul doğru olarak değerlendirilirse, NaN ile uğraşıyorsunuz demektir.

'u kullanmalısınız, ancak NaN değeri olup olmadığını belirlemek için aVariable.isNaN'u kullanmayı tercih edin. Eğer birlikte çalıştığınız değerin sınıflandırılması konusunda daha az eminsen Bir yan not biraz itibariyle


, sizin FloatingPointNumber uygun türünün floatingPointClass özelliğinin değerini üzerinde geçiş yapabilirsiniz.

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) 
} 

Onun değerleri FloatingPointClassification enum bildirilmiştir.