我想在Swift中转换浮点数为Int。像这样的基本强制转换不起作用,因为这些类型不是基本类型,不像Objective-C中的float和int类型
var float: Float = 2.2
var integer: Int = float as Float
但是这会产生以下错误消息:
Float不能转换为Int
知道如何将属性从Float转换为Int吗?
我想在Swift中转换浮点数为Int。像这样的基本强制转换不起作用,因为这些类型不是基本类型,不像Objective-C中的float和int类型
var float: Float = 2.2
var integer: Int = float as Float
但是这会产生以下错误消息:
Float不能转换为Int
知道如何将属性从Float转换为Int吗?
当前回答
有很多方法可以精确地取整数。您最终应该使用swift的标准库方法roundaround()来以所需的精度舍入浮点数。
取整use .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
其他回答
这里介绍的大多数解决方案对于较大的值都会崩溃,不应该在生产代码中使用。
如果你不关心非常大的值,使用这段代码来夹紧Double到max/min Int值。
let bigFloat = Float.greatestFiniteMagnitude
let smallFloat = -bigFloat
extension Float {
func toIntTruncated() -> Int {
let maxTruncated = min(self, Float(Int.max).nextDown)
let bothTruncated = max(maxTruncated, Float(Int.min))
return Int(bothTruncated)
}
}
// This crashes:
// let bigInt = Int(bigFloat)
// this works for values up to 9223371487098961920
let bigInt = bigFloat.toIntTruncated()
let smallInt = smallFloat.toIntTruncated()
您可以使用计算属性制作一个方便的扩展,并从项目中的任何地方使用它
extension Float{
var toInt : Int{
return Int(self)
}
}
调用
private var call: Float = 55.9
print(call.toInt)
var i = 1 as Int
var cgf = CGFLoat(i)
假设你在“X”中存储浮点值,而在“Y”中存储整数值。
Var Y = Int(x);
or
var myIntValue = Int(myFloatValue)
只使用类型转换
var floatValue:Float = 5.4
var integerValue:Int = Int(floatValue)
println("IntegerValue = \(integerValue)")
它将显示舍入值,例如:IntegerValue = 5意味着小数点将丢失