我想在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吗?
当前回答
转换很简单:
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
}
}
}
我希望这能帮助到一些人
其他回答
var floatValue = 10.23
var intValue = Int(floatValue)
这足以将float转换为Int
使用函数样式的转换(参见“Swift编程语言”中的“整数和浮点转换”一节)。(iTunes链接))
1> Int(3.4)
$R1: Int = 3
假设你在“X”中存储浮点值,而在“Y”中存储整数值。
Var Y = Int(x);
or
var myIntValue = Int(myFloatValue)
显式转换
转换为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。
在后一种情况下,这可能看起来很迂腐,但它在语义上更清楚,因为没有隐式转换……如果你在做信号处理,这很重要。
var i = 1 as Int
var cgf = CGFLoat(i)