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)

self.value est un double.

31
demandé sur Youssef Moawad 2015-02-11 09:17:45

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
55
répondu ColinE 2015-02-11 06:20:56

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
38
répondu rintaro 2017-03-01 23:05:08

Swift 3

if dbl.truncatingRemainder(dividingBy: 1) == 0 {
  //it's an integer
}
17
répondu William T. 2016-10-15 04:20:07

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
3
répondu Ciprian Rarau 2017-11-09 14:42:14

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
1
répondu Gallaugher 2017-02-26 01:11:44

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

}
1
répondu Musa almatri 2018-07-12 07:45:42

utiliser mod ( % ) ne fonctionnera plus.

Vous pouvez maintenant utiliser:

let dbl = 2.0
let isInteger = dbl.truncatingRemainder(dividingBy: 1.0) == 0.0
0
répondu Chad 2016-12-05 15:50:03