我想在Swift中将Float
转换为Int
。像这样的基本类型转换不起作用,因为与Objective-C中的float
和int
不同,这些类型不是原语
var float: Float = 2.2
var integer: Int = float as Float
但这会产生以下错误消息:
“Float”不能转换为“Int”
你知道如何将属性从Float
转换为Int
吗?
发布于 2014-06-04 13:59:49
您可以在Swift中将Float
转换为Int
,如下所示:
var myIntValue:Int = Int(myFloatValue)
println "My value is \(myIntValue)"
你也可以通过@paulm的评论来实现这个结果:
var myIntValue = Int(myFloatValue)
发布于 2016-11-03 18:09:51
有很多方法可以精确地对数字进行舍入。您最终应该使用swift的标准库方法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
要舍入到最近的整数,请使用.toNearestOrEven
规则:
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
发布于 2015-08-29 03:18:29
转换很简单:
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
}
}
}
我希望这能帮助到一些人
https://stackoverflow.com/questions/24029917
复制相似问题