Verlust an Präzision beim Übergeben von Zahlen durch den JSONDecoder in Swift 4IOS

Programmierung für iOS
Guest
 Verlust an Präzision beim Übergeben von Zahlen durch den JSONDecoder in Swift 4

Post by Guest »

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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post