Ich sende einige JSON-Daten an unseren Server und habe dabei Probleme beim Codieren bestimmter Werte mit dem neuen Swift 4 JSONDecoder. Nehmen Sie dieses Spielplatzbeispiel:
Code: Select all
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)!)
Also dekodiere ich zuerst den JSON und drucke das Ergebnis (Größe) aus. Die Ausgabe sieht so aus:
Code: Select all
[{name "Length", value 9.87}, {name "Width", value 9.95}]
Alles gut, aber wenn ich (Größe) mit dem Swift JSONEncoder zurück in JSON codiere, erhalte ich die folgende Ausgabe:
Code: Select all
[{"name":"Length","value":9.869999885559082},{"name":"Width","value":9.9499998092651367}]
Ich habe versucht, den Wert in einen Dezimal- oder Doppelwert zu ändern, aber ich habe ähnliche Probleme. Die Dezimalausgabe sieht so aus:
Code: Select all
[{"name":"Length","value":9.869999999999997952},{"name":"Width","value":9.95}]
und als Double:
Code: Select all
[{"name":"Length","value":9.8699999999999992},{"name":"Width","value":9.9499999999999993}]
Ich verstehe, dass eine Gleitkomma-, Doppel- oder Dezimalzahl nicht besonders präzise ist, aber was ich nicht verstehe, ist, warum das Ausgabefenster die richtigen Werte anzeigt, wenn Gleitkomma verwendet wird, bis ich Durchlaufen Sie den JSONEncoder. Ich bin mir nicht wirklich sicher, wie ich dieses Problem umgehen kann. Für Vorschläge wäre ich sehr dankbar.