首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift4.1中的JSON解析浮点具有意外行为

swift4.1中的JSON解析浮点具有意外行为
EN

Stack Overflow用户
提问于 2018-04-12 17:41:55
回答 1查看 1.7K关注 0票数 1

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

代码语言:javascript
复制
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
} 

现在如果我试一下这个。

代码语言:javascript
复制
print(parseMyFloat(jsonString: "{\"myFloat\":23.2322998046875}"))
// output: 23.2322998

输出是好的,但是如果我把func值改为23.232299804623.2322998046875返回nil。

代码语言:javascript
复制
print(parseMyFloat(jsonString: "{\"myFloat\":23.2322998}"))
// output: nil

然后,我尝试将Any强制转换为Float,但不起作用。

代码语言:javascript
复制
let dic:[String : Any] = ["float1" : 23.2322998046875, "float2" : 23.2322998]
print(dic["float1"] as? Float) // prints nil
print(dic["float2"] as? Float) // prints nil

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

我应该把所有的Float都换成Double的吗??和23.2322998046875为什么能用,为什么不能用23.2322998??

EN

回答 1

Stack Overflow用户

发布于 2018-04-12 20:54:43

如果您希望保持函数的原样,并且不希望将返回值修改为Double,则可以简单地将JSON值解析为Double以避免注释中解释的issue of casting Any to Float,然后在返回之前将Double转换为Float

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49793217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档