gpt4 book ai didi

swift - 为什么将 Double 转换为 Int 不会在 Swift 中返回可选的 Int?

转载 作者:搜寻专家 更新时间:2023-10-31 19:29:37 35 4
gpt4 key购买 nike

将 String 转换为 Int 会返回可选值,但将 Double 转换为 Int 不会返回可选值。这是为什么?我想检查 double 值是否大于最大 Int 值,但由于转换函数不返回可选值,我无法使用可选绑定(bind)进行检查。

var stringNumber: String = "555"
var intValue = Int(stringNumber) // returns optional(555)

var doubleNumber: Double = 555
var fromDoubleToInt = Int(doubleNumber) // returns 555

因此,如果我尝试转换大于最大整数的 double ,它会崩溃而不是返回 nil。

var doubleNumber: Double = 55555555555555555555
var fromDoubleToInt = Int(doubleNumber) // Crashes here

我知道还有另一种方法可以检查 double 是否大于最大整数值,但我很好奇为什么会这样。

最佳答案

如果我们考虑对于大多数 double ,转换为Int 仅仅意味着去掉小数部分:

let pieInt = Int(3.14159) // 3

Int(Double) 构造函数返回 nil 的唯一情况是在溢出的情况下。

对于字符串,转换为 Int 会返回一个可选的,因为通常情况下,字符串,例如“Hello world!”不能以普遍有意义的方式表示为 Int。所以我们在字符串不能表示为整数的情况下返回nil。顺便说一句,这包括可以完美表示为 double 或 float 的值:

考虑:

let iPi = Int("3.14159")
let dPi = Double("3.14159")

在这种情况下,iPinildPi3.14159。为什么?因为 "3.14159" 没有有效的 Int 表示。

但与此同时,当我们使用 Int 构造函数时,它接受一个 Double 并返回非可选值,我们得到一个值。

那么,如果该构造函数更改为返回一个可选值,为什么它会为 3.14159 返回 3 而不是 nil3.14159 不能表示为整数。

但是如果你想要一个方法返回一个可选的Int,当Double溢出时返回nil,你可以只写那个方法.

extension Double {
func toInt() -> Int? {
let minInt = Double(Int.min)
let maxInt = Double(Int.max)

guard case minInt ... maxInt = self else {
return nil
}

return Int(self)
}
}

let a = 3.14159.toInt() // returns 3
let b = 555555555555555555555.5.toInt() // returns nil

关于swift - 为什么将 Double 转换为 Int 不会在 Swift 中返回可选的 Int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956224/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com