Branje natančnih zneskov in velikih identifikatorjev
Denarne zneske preberete brez zaokroževanja s plavajočo vejico, identifikatorje pa z več števkami, kot jih lahko
hrani Long ali Double.
Pregled rešitve
Knjižnica vsako število hrani kot besedilo, s katerim je bilo prebrano. GetCurrency in GetDecimal
to besedilo pretvorita neposredno, ne prek Double (Currency nato zaokroži na štiri decimalna mesta, Decimal na 28–29
veljavnih števk); Value za cela števila zunaj obsega Long vrne Decimal. Vrednost Double dajo samo GetDouble
ter Value za števila z decimalnim delom ali eksponentom ali zunaj obsega Decimal.
Izvedba
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)
Opombe
GetLongštevilo z decimalnim delom zavrne (jeTypeMismatch), namesto da bi ga okrnil, prav tako število zunaj obsegaLong.GetCurrencyveč kot štiri decimalna mesta zaokroži na štiri (bančno zaokroževanje, kot ga uporabljaCCur); za več decimalnih mest uporabiteGetDecimal.Decimalhrani 28 do 29 veljavnih števk; število z več števkami se brez napake zaokroži na to natančnost, absolutna vrednost pod 1E-28 pa postane 0. Samo besedilo JSON se nikoli ne spremeni:GetStringvrne vse števke. Take vrednosti shranjujte v besedilno ali decimalno polje tabele, ne v polje tipaDouble. Vsa pravila in omejitve: Vrednosti in omejitve.- Števila v nizih se preberejo, če je njihovo besedilo brez presledkov na začetku in koncu število JSON:
"42"in" 4.2 "se prebereta;"007","+5",".5"in"12,5"sprožijojeTypeMismatch– take kode berite zGetString.
Sorodne teme
sl/wiki/msaccess/json/how-to/read-exact-numbers.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille