Преобразование Float в Int в Swift

Я хочу преобразовать Float в Int в Swift. Такое базовое литье не работает, потому что эти типы не являются примитивами, в отличие от Float и Int в Objective-C

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

Но это вызывает следующее сообщение об ошибке:

'Float' не конвертируется в 'Int'

Любая идея, как преобразовать свойство из Float в Int?

Ответ 1

Вы можете преобразовать Float в Int в Swift следующим образом:

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

Вы также можете получить этот результат с комментарием @paulm:

var myIntValue = Int(myFloatValue)

Ответ 2

Явное преобразование

Преобразование в Int потеряет любую точность (эффективно округляет). Получая доступ к математическим библиотекам, вы можете выполнять явные преобразования. Например:

Если вы хотите округлить и преобразовать в целое число:

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

результат равен 10.

Если вы хотите округлить и преобразовать в целое число:

let f = 10.51
let y = Int(ceil(f))
Результат

равен 11.

Если вы хотите явно округлить до ближайшего целого числа

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

результат равен 11.

В последнем случае это может показаться педантичным, но оно семантически яснее, поскольку нет никакого неявного преобразования... важно, если вы выполняете обработку сигнала, например.

Ответ 3

Преобразование прост:

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

Но это не безопасно:

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

Из-за хорошего сбоя:

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

Итак, я создал расширение, которое обрабатывает переполнение:

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

Надеюсь, это поможет кому-то.

Ответ 4

Существует множество способов округления числа с точностью. В конечном итоге вы должны использовать быстрый библиотечный метод rounded() для округления числа с плавающей точкой с желаемой точностью.

Чтобы округлить вверх, используйте правило .up:

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

Чтобы округлить вниз, используйте правило .down:

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

Чтобы округлить до ближайшего целого числа, используйте правило .down:

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

Обратите внимание на следующий пример:

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

Ответ 5

Вот так:

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

Ответ 6

Вы можете получить целочисленное представление вашего float, передав float в метод инициализатора Integer.

Пример:

Int(myFloat)

Имейте в виду, что любые числа после десятичной точки будут потеряны. Значение 3.9 - это Int из 3 и 8.99999 - целое число 8.

Ответ 7

Используйте преобразование стиля функции (см. раздел "Целое число и преобразование с плавающей запятой" из " Язык быстрого программирования." [iTunes ссылка])

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

Ответ 8

Вы можете набрать букву следующим образом:

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

Ответ 9

Просто используйте литье типов

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

 println("IntegerValue = \(integerValue)")

он отобразит значение округления, например: IntegerValue = 5 означает, что десятичная точка будет потеряна

Ответ 10

var floatValue = 10.23
var intValue = Int(floatValue)

Этого достаточно для преобразования из float в Int

Ответ 11

var i = 1 as Int

var cgf = CGFLoat(i)

Ответ 12

Используйте Int64 вместо Int. Int64 может хранить большие значения int.

Ответ 13

Предположим, что вы храните значение float в "X", и вы сохраняете целочисленное значение в "Y".

Var Y = Int(x);

или

var myIntValue = Int(myFloatValue)