Exakte Beträge und große Kennungen lesen
Sie lesen Geldbeträge ohne Gleitkommarundung und Kennungen mit mehr Stellen, als ein Long oder Double fasst.
Lösungsüberblick
Die Bibliothek bewahrt jede Zahl als den Text auf, mit dem sie gelesen wurde. GetCurrency und GetDecimal wandeln
diesen Text ohne Umweg über Double um (Currency rundet anschließend auf vier Nachkommastellen, Decimal auf 28 bis 29
signifikante Stellen); Value gibt für ganze Zahlen außerhalb des Long-Bereichs einen Decimal zurück. Einen
Double liefern nur GetDouble sowie Value für Zahlen mit Nachkommastellen oder Exponent und für Zahlen außerhalb
des Decimal-Bereichs.
Umsetzung
Dim doc As New JDoc
doc.LoadJson "{""total"": 1234567.89, ""orderId"": 9007199254740993}"
Dim total As Currency
total = doc.GetCurrency("$.total") ' 1234567.89, exact
Debug.Print doc.GetDecimal("$.orderId") ' 9007199254740993
Debug.Print TypeName(doc.Root("orderId").Value) ' Decimal
' Write an amount exactly
doc.SetValue "$.total", CCur(99.95)
Hinweise
GetLonglehnt eine Zahl mit Nachkommastellen ab (jeTypeMismatch), statt sie abzuschneiden, ebenso eine Zahl außerhalb desLong-Bereichs.GetCurrencyrundet mehr als vier Nachkommastellen auf vier, und zwar wieCCurauf die nächste gerade Ziffer (mathematisches Runden); verwenden Sie für mehr NachkommastellenGetDecimal.Decimalfasst 28 bis 29 signifikante Stellen; eine Zahl mit mehr Stellen wird ohne Fehler auf diese Genauigkeit gerundet, und eine Zahl, deren Betrag unter 1E-28 liegt, wird zu 0. Der JSON-Text selbst bleibt immer unverändert:GetStringgibt alle Ziffern zurück. Speichern Sie solche Werte in einem Text- oder Dezimalfeld, nicht in einemDouble-Feld. Alle Regeln und Grenzen: Werte und Grenzen.- Zahlen in Zeichenfolgen werden gelesen, wenn ihr Text ohne umgebende Leerzeichen eine JSON-Zahl ist:
"42"und" 4.2 "werden gelesen;"007","+5",".5"und"12,5"lösenjeTypeMismatchaus – lesen Sie solche Codes mitGetString.
Verwandte Themen
de/wiki/msaccess/json/how-to/read-exact-numbers.txt · Last modified: by Wolfgang van der Stille