type protocol has generic extension associated swift casting type-conversion

protocol - Convierte Float a Int en Swift



swift downcast (13)

Quiero convertir un Float a un Int en Swift. La conversión básica de este tipo no funciona porque estos tipos no son primitivos, a diferencia de float e int s en Objective-C

var float: Float = 2.2 var integer: Int = float as Float

Pero esto produce el siguiente mensaje de error:

''Float'' no es convertible a ''Int''

¿Alguna idea de cómo convertir propiedad de Float a Int ?


Conversión explícita

Convirtiendo a Int perderá cualquier precisión (efectivamente redondeando hacia abajo). Al acceder a las bibliotecas matemáticas puede realizar conversiones explícitas. Por ejemplo:

Si desea redondear y convertir a entero:

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

el resultado es 10.

Si desea redondear y convertir a entero:

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

el resultado es 11.

Si desea redondear explícitamente al entero más cercano

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

el resultado es 11.

En el último caso, esto puede parecer pedante, pero es semánticamente más claro ya que no hay conversión implícita ... importante si está haciendo procesamiento de señales, por ejemplo.


Convertir es simple:

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

Pero no es seguro

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

Will debido a un buen choque:

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

Así que creé una extensión que maneja el desbordamiento:

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 } } }

Espero que esto pueda ayudar a alguien


Hay muchas formas de redondear el número con precisión. Con el tiempo, debe usar el método de biblioteca estándar de swift rounded() para redondear el número de flotación con la precisión deseada.

Para redondear el uso de la regla .up :

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

Para redondear la regla de down del uso:

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

Para redondear al entero más cercano use la regla .toNearestOrEven :

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

Tenga en cuenta el siguiente ejemplo:

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


Me gusta esto:

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


Puede convertir Float a Int en Swift de esta manera:

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

También puedes lograr este resultado con el comentario de @paulm:

var myIntValue = Int(myFloatValue)


Puede obtener una representación entera de su flotante pasando el flotante al método de inicializador de enteros.

Ejemplo:

Int(myFloat)

Tenga en cuenta que cualquier cantidad después del punto decimal será pérdida. Es decir, 3.9 es un Int de 3 y 8.99999 es un número entero de 8.


Puedes escribir cast como este:

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


Solo usa el tipo de casting

var floatValue:Float = 5.4 var integerValue:Int = Int(floatValue) println("IntegerValue = /(integerValue)")

mostrará valor de redondeo, por ejemplo: IntegerValue = 5 significa que el punto decimal será pérdida


Supongamos que almacena el valor flotante en "X" y está almacenando el valor entero en "Y" .

Var Y = Int(x);

o

var myIntValue = Int(myFloatValue)


Use Int64 lugar de Int . Int64 puede almacenar valores int grandes.


Utilice una conversión de estilo de función (se encuentra en la sección titulada "Conversión de entero y punto flotante" de " El lenguaje de programación Swift " . [Enlace de iTunes])

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


var floatValue = 10.23 var intValue = Int(floatValue)

Esto es suficiente para convertir de float a Int


var i = 1 as Int var cgf = CGFLoat(i)