Проверка того, является ли двойное значение целым числом - Swift Мне нужно проверить, является ли двузначная переменная конвертируемой в Int без потери ее значения. Это не работает, потому что они имеют разные типы: if self.value == Int(self.value) где self.value является двойным. Ответ 1 Попробуйте "настил" двойное значение, а затем проверьте, не изменилось ли оно: let dbl = 2.0 let isInteger = floor(dbl) == dbl // true Сбой, если он не является целым числом let dbl = 2.4 let isInteger = floor(dbl) == dbl // false Ответ 2 проверьте, равен ли % 1: Swift 3: let dbl = 2.0 let isInteger = dbl.truncatingRemainder(dividingBy: 1) == 0 Swift 2: let dbl = 2.0 let isInteger = dbl % 1 == 0 Ответ 3 Swift 3 if dbl.truncatingRemainder(dividingBy: 1) == 0 { //it an integer } Ответ 4 Небольшое расширение для проверки: extension FloatingPoint { var isInt: Bool { return floor(self) == self } } Тогда просто сделайте let anInt = 1.isInt let nonInt = 3.142.isInt Ответ 5 Как преобразовать Double в Int (который будет обрезать десятичные числа), затем вернуться к Double, а затем сравнить это с оригинальным Double? Например: 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 Ответ 6 Использование mod (%) больше не будет работать. Теперь вы можете использовать: let dbl = 2.0 let isInteger = dbl.truncatingRemainder(dividingBy: 1.0) == 0.0
Ответ 1 Попробуйте "настил" двойное значение, а затем проверьте, не изменилось ли оно: let dbl = 2.0 let isInteger = floor(dbl) == dbl // true Сбой, если он не является целым числом let dbl = 2.4 let isInteger = floor(dbl) == dbl // false
Ответ 2 проверьте, равен ли % 1: Swift 3: let dbl = 2.0 let isInteger = dbl.truncatingRemainder(dividingBy: 1) == 0 Swift 2: let dbl = 2.0 let isInteger = dbl % 1 == 0
Ответ 4 Небольшое расширение для проверки: extension FloatingPoint { var isInt: Bool { return floor(self) == self } } Тогда просто сделайте let anInt = 1.isInt let nonInt = 3.142.isInt
Ответ 5 Как преобразовать Double в Int (который будет обрезать десятичные числа), затем вернуться к Double, а затем сравнить это с оригинальным Double? Например: 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
Ответ 6 Использование mod (%) больше не будет работать. Теперь вы можете использовать: let dbl = 2.0 let isInteger = dbl.truncatingRemainder(dividingBy: 1.0) == 0.0