2015-02-11 23 views

Odpowiedz

39

Try 'Podłogi' podwójna wartość następnie sprawdzenie, czy jest bez zmian:

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

nie działa, jeśli nie jest liczbą całkowitą

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

nie zakończyć rozwiązać kwestię *”... jeśli podwójnie zdefiniowana zmienna jest zamienna na Int bez utraty jej wartości. "*. Na przykład, daje wartość 3.1e100, ale ta wartość nie jest zamieniana na 'Int', ponieważ jest zbyt duża. –

27

sprawdzić, czy % 1 wynosi zero:

Swift 3:

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

Swift 2:

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

Byłoby miło, gdybyś mógł dodać więcej informacji, co robi '% 1'. Myślę, że pomoże to większej liczbie ludzi zrozumieć kod. – Christian

+0

używa operatora znanego jako modulo: https://en.wikipedia.org/wiki/Modulo_operation – newshorts

16

Swift 3

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

Stosując mod (%) nie będzie już pracować.

Teraz można użyć:

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

Jak o konwersji Double do Int (która odetnie dziesiętnych), a następnie z powrotem do podwójnego, a następnie porównując to do pierwotnego osobowy? Na przykład:

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 
3

małe rozszerzenie do sprawdzenia to:

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

Następnie wystarczy zrobić

let anInt = 1.isInt 
let nonInt = 3.142.isInt 
Powiązane problemy