Mit go1.1.2 Win64 habe ich ein Go-Programm, das eine Struktur marshale, die ein float64 enthält. Wenn der Wert von float64 keine ganze Zahl ist, z. 1234.44, dann wird es "marshal" ed als float (json.Marshal). Wenn es jedoch eine ganze Zahl ist, z. "1234.00" wird es als Ganzzahl "1234" gemarshallt. Wenn ich das am anderen Ende (Dart) erhalte, behandelt Dart (30188) die ganze Zahl als Integer (in map - JSON.decode). Folglich bricht das Dart-Programm ab, wenn die Darstellung der float (double) -Daten keinen Dezimalpunkt enthält, und ich versuche, es aus der Karte als Doppel zu extrahieren.Funktioniert Go Float64 korrekt zu JSON?
Dies kann offensichtlich eine Reihe von verschiedenen Möglichkeiten gelöst werden (z. B. konvertieren in Integer und dann zurück in Float konvertieren), aber ich fragte mich, ob es einen anderen (besseren) Weg, um mit dieser Situation umzugehen.
Gibt es einen anderen besseren Weg, dies zu handhaben als float64 in Integer zu konvertieren?
Danke für die Lösung. Ich denke, das sollte am Dartende gelöst werden. Es scheint, dass eine Ganzzahl in Dart keinem Double zugewiesen werden kann. Dies scheint mir eine Anomalie zu sein, aber ich akzeptiere, dass ich zumindest aus einer theoretischen Perspektive falsch liege (verstümmelt, niedergeschlagen, etc.). Die Lösung, die ich derzeit habe, ist wie folgt: "double dAcctBal = (mActctData ['D_AcctBal'] als num)/1;" (wobei mAcctData die Map ist, bei der "D_AcctBal" eine Ganzzahl oder ein Double sein kann, abhängig davon, ob es sich um eine ganze Zahl handelt). Diese Lösung erscheint mir ein bisschen wie ein Hack, aber wenn eine Integer nicht direkt einem Double zugewiesen werden kann? –
Ja, ich stimme zu, dass es am besten wäre, es am Dartende zu lösen. Ich würde Ihnen gerne eine solche Lösung anbieten, wenn ich das wüsste, aber meine Erfahrung mit Dart ist * sehr * begrenzt. Vielleicht kann jemand mit mehr Wissen eine idiomatische Dart-Lösung finden. – ANisus
JSON gibt die Semantik seiner Zahlenliterale nicht an, daher ist es nicht korrekter, doppelte als ganze Zahlen zu verwenden. Dart hat zwei Nummerntypen.Alles, was einen Dezimalpunkt oder einen Exponentialteil enthält, muss ein Double sein, und alles andere wird als Integer geparst, was in Dart mehr Präzision als Doppel liefert. Dies bewahrt so viele Informationen wie möglich von der JSON-Nummer. Sie müssen jedoch .toDouble manuell verwenden, wenn Sie möchten, dass alle Zahlen verdoppelt werden. – lrn