gpt4 book ai didi

swift - JSON 解析 float 在 swift4.1 中有意外行为

转载 作者:行者123 更新时间:2023-11-28 06:00:54 25 4
gpt4 key购买 nike

一个解析 json 变量并返回 float 的简单函数。

func parseMyFloat(jsonString: String) -> Float? {
if let data = jsonString.data(using: String.Encoding.utf8, allowLossyConversion: true),
let parsedJSON = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [String : Any] {
if let parsedJSON = parsedJSON {
return parsedJSON["myFloat"] as? Float
}
}
return nil
}

现在,如果我尝试这个。

print(parseMyFloat(jsonString: "{\"myFloat\":23.2322998046875}"))
// output: 23.2322998

输出很好,但如果我将 23.2322998046875 值更改为 23.2322998046 func 返回 nil。

print(parseMyFloat(jsonString: "{\"myFloat\":23.2322998}"))
// output: nil

然后我尝试将 Any 转换为 Float,但没有用。

let dic:[String : Any] = ["float1" : 23.2322998046875, "float2" : 23.2322998]
print(dic["float1"] as? Float) // prints nil
print(dic["float2"] as? Float) // prints nil

我的代码中有很多 float ,所以在迁移到 swift 4.1 之后我遇到了这个问题。

我是否应该将所有 Float 更改为 Double23.2322998046875 为什么有效,为什么不有效 23.2322998??

最佳答案

如果你想保持你的函数原样并且不想将返回值修改为Double,你可以简单地将JSON值解析为Double来避免 issue of casting Any to Float如评论中所述,然后在返回之前将 Double 转换为 Float

func parseMyFloat(jsonString: String) -> Float? {
if let data = jsonString.data(using: String.Encoding.utf8, allowLossyConversion: true), let parsedJSON = (try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments)) as? [String : Any], let myDouble = parsedJSON["myFloat"] as? Double {
return Float(myDouble)
}
return nil
}

parseMyFloat(jsonString: "{\"myFloat\":23.2322998046875}") //23.2323998
parseMyFloat(jsonString: "{\"myFloat\":23.2322998}") //23.2323998

关于swift - JSON 解析 float 在 swift4.1 中有意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49793217/

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