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
}