Je veux convertir un Float
à un Int
à Swift. Le casting de base comme celui-ci ne fonctionne pas car ces types ne sont pas des primitives, contrairement aux float
s et int
s dans Objective-C
var float: Float = 2.2
var integer: Int = float as Float
Mais cela produit le message d'erreur suivant:
«Float» n'est pas convertible en «Int»
Une idée de la façon de convertir une propriété Float
en Int
?
as
opérateur est pour le down-casting vers les sous-classes. Soit:UIView as UIButton
Réponses:
Vous pouvez convertir
Float
àInt
Swift comme ceci:Vous pouvez également obtenir ce résultat avec le commentaire de @ paulm:
la source
var myIntValue = Int(myFloatValue)
travaux.Conversion explicite
La conversion en Int perdra toute précision (en arrondissant efficacement). En accédant aux bibliothèques mathématiques, vous pouvez effectuer des conversions explicites. Par exemple:
Si vous souhaitez arrondir et convertir en nombre entier:
le résultat est 10.
Si vous souhaitez arrondir et convertir en nombre entier:
le résultat est 11.
Si vous souhaitez arrondir explicitement à l'entier le plus proche
le résultat est 11.
Dans ce dernier cas, cela peut sembler pédant, mais c'est sémantiquement plus clair car il n'y a pas de conversion implicite ... important si vous faites du traitement du signal par exemple.
la source
round(10.5) == 11.0
La conversion est simple:
Mais ce n'est pas sûr:
Sera due à un joli crash:
J'ai donc créé une extension qui gère le débordement:
J'espère que cela peut aider quelqu'un
la source
Il existe de nombreuses façons d'arrondir les nombres avec précision. Vous devriez éventuellement utiliser la méthode de bibliothèque standard de swift
rounded()
pour arrondir le nombre flottant avec la précision souhaitée.Pour arrondir la
.up
règle d' utilisation :Pour arrondir la
.down
règle d' utilisation :Pour arrondir à la règle d' utilisation de l'entier le plus proche
.toNearestOrEven
:Soyez conscient de l'exemple suivant:
la source
Comme ça:
la source
Vous pouvez obtenir une représentation entière de votre float en passant le float dans la méthode d'initialisation Integer.
Exemple:
Gardez à l'esprit que tout nombre après la virgule sera une perte. Cela signifie que 3,9 est un entier de 3 et 8,99999 est un entier de 8.
la source
Utilisez une conversion de style de fonction (trouvée dans la section intitulée «Conversion de nombres entiers et à virgule flottante» de « The Swift Programming Language » . [Lien iTunes])
la source
Vous pouvez taper cast comme ceci:
la source
Utilisez simplement la conversion de type
il affichera la valeur d'arrondi, par exemple: IntegerValue = 5 signifie que le point décimal sera une perte
la source
la source
Cela suffit pour convertir de
float
enInt
la source
Supposons que vous stockiez la valeur flottante dans
"X"
et que vous stockiez la valeur entière dans"Y"
.ou
la source
Utilisez
Int64
au lieu deInt
.Int64
peut stocker de grandes valeurs int.la source
Float
une plage de valeurs plus grande queInt
?