the sintaxis programming language swift int double

sintaxis - swift reference



Comprobando si un valor doble es un nĂºmero entero-Swift (7)

Necesito comprobar si una variable de doble definición es convertible a Int sin perder su valor. Esto no funciona porque son de diferentes tipos:

if self.value == Int(self.value)

donde self.value es un doble.


¿Qué hay de convertir el doble en un int (que cortará decimales), luego volver a un doble, y luego comparar esto con el doble original? Por ejemplo:

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


Pruebe con "suelo" el doble valor y luego verifique si no ha cambiado:

let dbl = 2.0 let isInteger = floor(dbl) == dbl // true

Falla si no es un entero

let dbl = 2.4 let isInteger = floor(dbl) == dbl // false


Swift 3

if dbl.truncatingRemainder(dividingBy: 1) == 0 { //it''s an integer }


Una pequeña extensión para verificar esto:

extension FloatingPoint { var isInt: Bool { return floor(self) == self } }

Entonces solo hazlo

let anInt = 1.isInt let nonInt = 3.142.isInt


Usar mod (%) ya no funcionará.

Ahora puede usar:

let dbl = 2.0 let isInteger = dbl.truncatingRemainder(dividingBy: 1.0) == 0.0


compruebe si % 1 es cero:

Swift 3:

let dbl = 2.0 let isInteger = dbl.truncatingRemainder(dividingBy: 1) == 0

Swift 2:

let dbl = 2.0 let isInteger = dbl % 1 == 0


Solución simple

Sugiero convertir el valor en Int luego en Double y verificar el nuevo valor

if value == Double(Int(value)) { // The value doesn''t have decimal part. ex: 6.0 } else { // The value has decimal part. ex: 6.3 }