我想将转换Float
成Int
斯威夫特。像这样的基本转换不起作用,因为这些类型不是基元,这与Objective-C中的float
s和int
s 不同
var float: Float = 2.2
var integer: Int = float as Float
但这会产生以下错误消息:
“浮点数”不可转换为“整数”
知道如何将属性从转换Float
为Int
吗?
我想将转换Float
成Int
斯威夫特。像这样的基本转换不起作用,因为这些类型不是基元,这与Objective-C中的float
s和int
s 不同
var float: Float = 2.2
var integer: Int = float as Float
但这会产生以下错误消息:
“浮点数”不可转换为“整数”
知道如何将属性从转换Float
为Int
吗?
Answers:
您可以转换Float
到Int
斯威夫特这样的:
var myIntValue:Int = Int(myFloatValue)
println "My value is \(myIntValue)"
您还可以使用@paulm的注释来实现此结果:
var myIntValue = Int(myFloatValue)
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。
在后一种情况下,这看起来似乎很古怪,但是在语义上更加清晰,因为没有隐式转换……例如,如果您要进行信号处理,则很重要。
round(10.5) == 11.0
转换很简单:
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
}
}
}
我希望这可以帮助某人
有很多方法可以精确地四舍五入。您最终应该使用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
您可以通过将float传递给Integer初始值设定项方法来获得float的整数表示。
例:
Int(myFloat)
请记住,小数点后的任何数字都会丢失。意思是,3.9是3的整数,而8.99999是8的整数。
假设您将float值存储在中"X"
,并将整数值存储在中"Y"
。
Var Y = Int(x);
要么
var myIntValue = Int(myFloatValue)
as
操作是向下铸造到子类。即:UIView as UIButton