Преобразование 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)