我想在Swift中将Float
转换为Int
。基本的强制转换不起作用,因为这些类型不像Objective-C中的float
和int
那样是原始类型。
var float: Float = 2.2
var integer: Int = float as Float
但这会产生以下错误消息:
'Float' 无法转换为 'Int'
有什么好的方法可以正确地从Float
转换为Int
吗?
我想在Swift中将Float
转换为Int
。基本的强制转换不起作用,因为这些类型不像Objective-C中的float
和int
那样是原始类型。
var float: Float = 2.2
var integer: Int = float as Float
但这会产生以下错误消息:
'Float' 无法转换为 'Int'
有什么好的方法可以正确地从Float
转换为Int
吗?
在Swift中,您可以通过以下方式将Float
转换为Int
:
var myIntValue:Int = Int(myFloatValue)
println "My value is \(myIntValue)"
您也可以通过@paulm的评论来实现此结果:
var myIntValue = Int(myFloatValue)
var myIntValue = Int(myFloatValue)
是可行的。 - Tim SullivanInt(Float.greatestFiniteMagnitude)
这样的大数值时会崩溃。 - de.将数据转换为整数会失去任何精度(实际上是向下舍入)。通过访问数学库,您可以执行显式类型转换。例如:
如果您想要对其向下舍入并转换为整数:
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。
在后一种情况下,这可能看起来有些学究气,但从语义上讲更清晰,因为没有隐式转换...例如,如果您正在进行信号处理,则这一点非常重要。
round(10.5) == 11.0
- itMaxencelet y = Int(round(f))
can also be written as let y = lround(f)
- S1LENT WARRIOR有很多方法可以精确地舍入数字。您最终应该使用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
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
}
}
}
我希望这能对某些人有所帮助
通过将浮点数传递到整数初始化方法中,您可以获得浮点数的整数表示。
例:
Int(myFloat)
请注意,小数点后面的数字将被丢弃。也就是说,3.9被转换为整数3,8.99999被转换为整数8。
像这样:
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
var floatValue = 10.23
var intValue = Int(floatValue)
float
转换为 Int
。"X"
中,并且将整数值存储在"Y"
中。Var Y = Int(x);
or
var myIntValue = Int(myFloatValue)
只需使用类型转换
var floatValue:Float = 5.4
var integerValue:Int = Int(floatValue)
println("IntegerValue = \(integerValue)")
as
运算符用于向下转型为子类。例如:UIView as UIButton
。 - Jack