Проверка того, является ли двойное значение целым числом - 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