Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift 4中通过JSONDecoder传递数字时丢失精度_Ios_Json_Swift4 - Fatal编程技术网

Ios 在Swift 4中通过JSONDecoder传递数字时丢失精度

Ios 在Swift 4中通过JSONDecoder传递数字时丢失精度,ios,json,swift4,Ios,Json,Swift4,我正在向我们的服务器发送一些JSON数据,在使用新的Swift 4 JSONDecoder对某些值进行编码时出现问题。以这个操场为例: import Foundation struct QuantyTest: Codable { var name: String var value: Float } let json = """ [ { "name": "Length", "value": 9.87 }, {

我正在向我们的服务器发送一些JSON数据,在使用新的Swift 4 JSONDecoder对某些值进行编码时出现问题。以这个操场为例:

import Foundation

struct QuantyTest: Codable {
    var name: String
    var value: Float
}

let json = """
[
    {
        "name": "Length",
        "value": 9.87
    },
    {
        "name": "Width",
        "value": 9.95
    }
]
""".data(using: .utf8)!

let decoder = JSONDecoder()
var size = try decoder.decode([QuantyTest].self, from: json)
let encoder = JSONEncoder()
var encodSize = try? encoder.encode(size)
print(String(data: encodSize!, encoding: .utf8)!)
所以我首先解码JSON并打印出结果(大小)。的输出如下所示:

[{name "Length", value 9.87}, {name "Width", value 9.95}]
[{"name":"Length","value":9.869999999999997952},{"name":"Width","value":9.95}]
很好,但是当我使用Swift JSONEncoder将(大小)编码回JSON时,我得到以下输出:

[{"name":"Length","value":9.869999885559082},{"name":"Width","value":9.9499998092651367}]
我曾尝试将值更改为十进制或双精度,但我遇到了类似的问题,十进制输出如下所示:

[{name "Length", value 9.87}, {name "Width", value 9.95}]
[{"name":"Length","value":9.869999999999997952},{"name":"Width","value":9.95}]
作为替身:

[{"name":"Length","value":9.8699999999999992},{"name":"Width","value":9.9499999999999993}]

我知道浮点、双精度或十进制并不是超精确的,但我不明白的是,在我通过JSONECODER之前,为什么在使用浮点时输出窗口会显示正确的值。我真的不知道如何解决这个问题,如果有任何建议,我们将不胜感激。

可能的重复项–打印字典调用其浮点条目上的
debugDescription
,这样可以打印精度更高的值。请使用十进制而不是浮点。但Swift 4中的Codable在某些情况下仍然是不正确的。希望苹果能尽快修复它。你可以在这里查看问题:该死的浮点!!!看起来这个问题仍然存在!截至2020年3月仍然存在!