web-dev-qa-db-fra.com

Convertir Float en Int dans Swift

Je veux convertir un Float en un Int dans Swift. Ce type de transtypage ne fonctionne pas car ces types ne sont pas des primitives, contrairement à floats et ints 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 comment convertir une propriété de Float à Int?

187
kev

Vous pouvez convertir Float en Int en Swift comme ceci:

var myIntValue:Int = Int(myFloatValue)
println "My value is \(myIntValue)"

Vous pouvez également obtenir ce résultat avec le commentaire de @ paulm:

var myIntValue = Int(myFloatValue)
307
iPatel

Conversion explicite

La conversion en Int perdra toute précision (arrondi efficacement). En accédant aux bibliothèques mathématiques, vous pouvez effectuer des conversions explicites. Par exemple:

Si tu voulais arrondir vers le bas et convertir en entier:

let f = 10.51
let y = Int(floor(f))

le résultat est 10.

Si tu voulais rassembler et convertir en entier:

let f = 10.51
let y = Int(ceil(f))

le résultat est 11.

Si vous voulez explicitement arrondir à l'entier le plus proche

let f = 10.51
let y = Int(round(f))

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 utilisez le traitement du signal, par exemple.

105
user3675131

La conversion est simple:

let float = Float(1.1) // 1.1
let int = Int(float) // 1

Mais ce n'est pas sûr:

let float = Float(Int.max) + 1
let int = Int(float)

Sera en raison d'un accident de Nice:

fatal error: floating point value can not be converted to Int because it is greater than Int.max

J'ai donc créé une extension qui gère les débordements:

extension Double {
    // If you don't want your code crash on each overflow, use this function that operates on optionals
    // E.g.: Int(Double(Int.max) + 1) will crash:
    // fatal error: floating point value can not be converted to Int because it is greater than Int.max
    func toInt() -> Int? {
        if self > Double(Int.min) && self < Double(Int.max) {
            return Int(self)
        } else {
            return nil
        }
    }
}


extension Float {
    func toInt() -> Int? {
        if self > Float(Int.min) && self < Float(Int.max) {
            return Int(self)
        } else {
            return nil
        }
    }
}

J'espère que cela peut aider quelqu'un

26
Artyom Razinov

Il y a beaucoup de façons d'arrondir les chiffres avec précision. Vous devriez finalement utiliser la méthode de bibliothèque standard de Swift, rounded(), pour arrondir le nombre flottant avec la précision souhaitée.

Pour arrondir en haut utilisez la règle .up:

let f: Float = 2.2
let i = Int(f.rounded(.up)) // 3

Pour arrondir en bas utilisez la règle .down:

let f: Float = 2.2
let i = Int(f.rounded(.down)) // 2

Pour arrondir à l'entier le plus proche, utilisez la règle .toNearestOrEven:

let f: Float = 2.2
let i = Int(f.rounded(.toNearestOrEven)) // 2

Soyez conscient de l'exemple suivant:

let f: Float = 2.5
let i = Int(roundf(f)) // 3
let j = Int(f.rounded(.toNearestOrEven)) // 2
22
Borut Tomazin

Comme ça:

var float:Float = 2.2 // 2.2
var integer:Int = Int(float) // 2 .. will always round down.  3.9 will be 3
var anotherFloat: Float = Float(integer) // 2.0
5
Logan

Vous pouvez obtenir une représentation entière de votre float en le passant dans la méthode d'initialisation Integer.

Exemple:

Int(myFloat)

Gardez à l'esprit que tout nombre après la virgule sera perdu. Signification, 3.9 est un Int de 3 et 8.99999 est un entier de 8.

5
A'sa Dickens

Utilisez une conversion de style de fonction (trouvée dans la section "Conversion de nombres entiers et en virgule flottante" de " Le Swift Langage de programmation. " [Lien iTunes])

  1> Int(3.4)
$R1: Int = 3
3
cobbal

Vous pouvez taper cast comme ceci:

 var float:Float = 2.2
 var integer:Int = Int(float)
1
CNU

Il suffit d'utiliser le casting

 var floatValue:Float = 5.4
 var integerValue:Int = Int(floatValue)

 println("IntegerValue = \(integerValue)")

il affichera la valeur arrondie dans: Entier Valeur = 5 signifie que le point décimal sera perdu

1
pravin salame
var i = 1 as Int

var cgf = CGFLoat(i)
0
Caledonia

Supposons que vous stockiez une valeur flottante dans "X" et que vous stockiez une valeur entière dans "Y".

Var Y = Int(x);

ou

var myIntValue = Int(myFloatValue)
0
var floatValue = 10.23
var intValue = Int(floatValue)

Cela suffit pour convertir de float à Int

0
Daya Kevin