在Swift中将Float转换为Int

我想在Swift中将Float转换为Int 。 像这样的基本转换不起作用,因为这些types不是原语,不像Objective-C中的float s和int s

 var float: Float = 2.2 var integer: Int = float as Float 

但是这会产生以下错误信息:

“浮动”不能转换为“国际”

任何想法如何将属性从Float转换为Int

你可以像这样在Swift中将Float转换为Int

 var myIntValue:Int = Int(myFloatValue) println "My value is \(myIntValue)" 

你也可以通过@ paulm的评论来达到这个结果:

 var myIntValue = Int(myFloatValue) 

显式转换

转换为Int将失去任何精度(有效舍入)。 通过访问math库,您可以执行显式转换。 例如:

如果你想舍入并转换为整数:

 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。

在后一种情况下,这可能看起来很迂腐,但它在语义上更清晰,因为没有隐式转换……例如,如果您正在进行信号处理,这很重要。

转换很简单:

 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 

所以我创build了一个处理溢出的扩展:

 extension Double { // If you don't want your code crash on each overflow, use this function that operates on optionals // Eg: 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 } } } 

我希望这可以帮助别人

有很多方法可以精确地舍入数字。 你最终应该使用swift的标准库方法round rounded()以所需的精度rounded() float数。

总结使用.up规则:

 let f: Float = 2.2 let i = Int(f.rounded(.up)) // 3 

.down使用.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 

喜欢这个:

 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 

您可以通过将float传递给Integer初始值设定项方法来获取float的整数表示forms。

例:

 Int(myFloat) 

请记住,小数点后面的数字将会丢失。 意思是,3.9是3的Int,8.99999是8的整数。

使用函数样式转换(在“ Swift编程语言 ”中标有“整数和浮点转换”部分中find)[iTunes链接])

  1> Int(3.4) $R1: Int = 3 

你可以像这样键入cast:

  var float:Float = 2.2 var integer:Int = Int(float) 

只要使用types铸造

  var floatValue:Float = 5.4 var integerValue:Int = Int(floatValue) println("IntegerValue = \(integerValue)") 

它会显示舍入值例如:IntegerValue = 5意味着小数点将是损失

 var i = 1 as Int var cgf = CGFLoat(i) 

使用Int64而不是IntInt64可以存储大的int值。

 var floatValue = 10.23 var intValue = Int(floatValue) 

这足以将float转换为Int

假设你将float值存储在"X"并且你将整数值存储在"Y"

 Var Y = Int(x); 

要么

 var myIntValue = Int(myFloatValue)