Chcę przekonwertować A Float
na Int
Swift. Podstawowe odlew jak to nie działa, ponieważ te typy nie są prymitywy, w przeciwieństwie float
s i int
s w Objective-C
var float: Float = 2.2
var integer: Int = float as Float
Ale powoduje to następujący komunikat o błędzie:
„Float” nie jest konwertowany na „Int”
Masz pomysł, jak przekonwertować właściwość z Float
na Int
?
as
operator jest w dół do odlewania na podklasy. tj .:UIView as UIButton
Odpowiedzi:
Możesz przekonwertować
Float
naInt
Swift w następujący sposób:Możesz również osiągnąć ten wynik za pomocą komentarza @ paulm:
źródło
var myIntValue = Int(myFloatValue)
Pracuje.Jawna konwersja
Konwersja na Int spowoduje utratę dowolnej precyzji (skuteczne zaokrąglanie w dół). Uzyskując dostęp do bibliotek matematycznych, możesz wykonywać jawne konwersje. Na przykład:
Jeśli chcesz zaokrąglić w dół i przekonwertować na liczbę całkowitą:
wynik to 10.
Jeśli chcesz zaokrąglić w górę i przekonwertować na liczbę całkowitą:
wynik to 11.
Jeśli chcesz jawnie zaokrąglić do najbliższej liczby całkowitej
wynik to 11.
W tym drugim przypadku może się to wydawać pedantyczne, ale jest semantycznie wyraźniejsze, ponieważ nie ma niejawnej konwersji ... ważne, jeśli wykonujesz na przykład przetwarzanie sygnału.
źródło
round(10.5) == 11.0
Konwersja jest prosta:
Ale to nie jest bezpieczne:
Will z powodu miłej awarii:
Więc stworzyłem rozszerzenie, które obsługuje przepełnienie:
Mam nadzieję, że to może komuś pomóc
źródło
Istnieje wiele sposobów na precyzyjne zaokrąglanie liczb. W końcu powinieneś użyć standardowej metody bibliotecznej swift,
rounded()
aby zaokrąglić liczbę zmiennoprzecinkową z pożądaną precyzją.Aby zaokrąglić w górę, użyj
.up
reguły:Aby zaokrąglić w dół
.down
regułę użycia :Aby zaokrąglić do najbliższej
.toNearestOrEven
reguły użycia :Pamiętaj o następującym przykładzie:
źródło
Lubię to:
źródło
Możesz uzyskać całkowitą reprezentację liczby zmiennoprzecinkowej, przekazując wartość zmiennoprzecinkową do metody inicjalizacji liczby całkowitej.
Przykład:
Pamiętaj, że wszelkie liczby po przecinku będą stratą. Oznacza to, że 3,9 to liczba całkowita 3, a 8,99999 to liczba całkowita 8.
źródło
Użyj konwersji stylu funkcji (znalezionej w sekcji „Konwersja liczb całkowitych i zmiennoprzecinkowych” z „ The Swift Programming Language ” . [ITunes link])
źródło
Możesz wpisać cast w następujący sposób:
źródło
Wystarczy użyć rzutowania typu
wyświetli wartość zaokrąglenia, np .: IntegerValue = 5 oznacza, że przecinek dziesiętny będzie stratą
źródło
źródło
To wystarczy, aby przekonwertować z
float
naInt
źródło
Załóżmy, że przechowujesz wartość zmiennoprzecinkową w
"X"
i zapisujesz wartość całkowitą w"Y"
.lub
źródło
Użyj
Int64
zamiastInt
.Int64
może przechowywać duże wartości int.źródło
Float
zakresem wartości większym niżInt
?