Vérifier si une valeur double est un entier-Swift
je dois vérifier si une variable double-définie est convertible en Int sans perdre sa valeur. Cela ne fonctionne pas parce qu'ils sont de différents types:
if self.value == Int(self.value)
où self.value
est un double.
7 réponses
Essayez 'plancher' le double de la valeur puis de vérifier si elle est inchangée:
let dbl = 2.0
let isInteger = floor(dbl) == dbl // true
Échoue si elle n'est pas un entier
let dbl = 2.4
let isInteger = floor(dbl) == dbl // false
vérifier si % 1
est égale à zéro:
Swift 3:
let dbl = 2.0
let isInteger = dbl.truncatingRemainder(dividingBy: 1) == 0
Swift 2:
let dbl = 2.0
let isInteger = dbl % 1 == 0
Swift 3
if dbl.truncatingRemainder(dividingBy: 1) == 0 {
//it's an integer
}
Une petite extension pour vérifier ceci:
extension FloatingPoint {
var isInt: Bool {
return floor(self) == self
}
}
alors faites juste
let anInt = 1.isInt
let nonInt = 3.142.isInt
Que Diriez-vous de convertir le Double en Int (qui coupera les décimales), puis de revenir à un Double, puis de le comparer au Double original? Par exemple:
var dbl:Double = 22/3
dbl == Double(Int(dbl))
// false: dbl = 7.33333... Double(Int(dbl)) = 7.0
dbl = 25
dbl == Double(Int(dbl))
// true: dbl = 25.0, Double(Int(dbl)) = 25.0
Solution Simple
je suggère de convertir la valeur en Int
puis Double
et la vérification de la nouvelle valeur
if value == Double(Int(value)) {
// The value doesn't have decimal part. ex: 6.0
} else {
// The value has decimal part. ex: 6.3
}
utiliser mod ( % ) ne fonctionnera plus.
Vous pouvez maintenant utiliser:
let dbl = 2.0
let isInteger = dbl.truncatingRemainder(dividingBy: 1.0) == 0.0