Float 到 Int 的安全转换?

hot*_*aw2 5 numbers type-conversion swift

Float 到 Int 的转换被记录为一个简单的方法:

let i = Int(x)
Run Code Online (Sandbox Code Playgroud)

然而,这本身是不安全的,因为如果 x 太大而无法放入整数,或者是某种 NaN,Swift 应用程序就会崩溃。

那么,将 Float 或 Double 的未知内容转换为 Int(Int32、UInt16 等)的最简单但又安全的方法是什么,例如,没有崩溃的风险?有 Int?() 类型吗?或等效的“if let”语句?

Mar*_*n R 4

Int(exactly:)可能是您正在寻找的:

如果可以精确表示,则根据给定的浮点值创建一个整数。

如果作为源传递的值无法准确表示,则结果为零。

例子:

let x = 123e20
if let i = Int(exactly: x) {
    print(i)
} else {
    print("not representable")
}
Run Code Online (Sandbox Code Playgroud)

如果浮点数不是整数,这也会失败,因此您可能需要在转换之前对其进行舍入:

let x = 12.3
if let i = Int(exactly: x.rounded(.towardZero)) {
    print(i)
}
Run Code Online (Sandbox Code Playgroud)

向零舍入是Int(x)可以的,您可以选择所需的舍入模式。