Swift中String转Int异常:"1.0"转Int结果为0而非1的问题排查
问题原因解析
这是因为你调用了两个完全不同的Int初始化方法,它们的行为逻辑存在本质差异:
针对字符串的初始化器
Int(_ string: String?):
这个方法要求输入的字符串必须是标准纯整数格式(仅允许数字、可选正负号,不能包含小数点或其他非数字字符)。当传入"1.0"时,字符串里的小数点不符合格式要求,初始化直接失败返回nil,后续?? 0触发兜底逻辑,最终输出0。针对浮点数的初始化器
Int(_ double: Double):
这个方法的作用是将Double类型数值转换为Int,逻辑是直接截断小数部分、保留整数位。所以Int(1.0)会把浮点数1.0转换成整数1,输出结果符合预期。
如果想让"1.0"解析出整数1,需要先把字符串转成Double再转成Int,示例代码如下:
print("int==1.0--\(Int(Double("1.0") ?? 0.0))")
内容的提问来源于stack exchange,提问作者Fahim Parkar
相关产品推荐
相关产品推荐

