Bevar desimalpresisjon når beløp sendes som JSON
Avtal representasjon, skala og avrunding før JSON-beløp går gjennom flere systemer og summeringer.
JSON har en talltype, men fastsetter ikke at alle mottakere bruker samme interne desimalpresisjon. Beløp som passer i et tekstformat, kan bli tilnærmet som binære flyttall under behandlingen. Presisjon må avklares gjennom hele kjeden, fra kilde til kontrollsum.
Syntetisk avrundingsprøve
Tre oppdiktede linjer har hver et beregnet beløp på 3,335 kroner før avtalt avrunding. Eksemplet bruker en uttrykkelig regel om avrunding opp ved nøyaktig halv øre.
| Beregningsmåte | Beregning | Resultat |
|---|---|---|
| Hver linje først | 3,34 + 3,34 + 3,34 | 10,02 |
| Sum før avrunding | 3 × 3,335 = 10,005 | 10,01 |
| Differanse | 10,02 − 10,01 | 0,01 |
Begge metoder følger den angitte avrundingsregelen på sitt nivå, men gir forskjellige totalsummer. Kontrakten må si hvilket nivå som gjelder. En ekstra avrunding i mottakeren kan ødelegge samsvar selv om avsenderen beregnet riktig.
Avtal tall eller tekst
RFC 8259 omtaler begrensninger i tallpresisjon. Dersom leverandøren sender desimalverdier som JSON-tall, bør mottakeren lese dem med en egnet desimaltype. Dersom kontrakten bruker tekst, må format, desimalpunkt og validering være dokumentert. Ikke bytt representasjon på egen hånd og forvent at serveren godtar den.
Beløp lagret som heltall i minste valutaenhet kan være egnet i noen grensesnitt, men to desimaler kan ikke antas for enhver valuta eller beregning. Enhetspris og kurs kan også trenge større presisjon enn den ferdige fakturalinjen.
Skil mellom kildeverdi, beregnet mellomverdi og presentert verdi. Visning med to desimaler betyr ikke at enhetsprisen internt har samme skala. Kontrollen må bruke de verdiene og reglene som faktisk inngår i dokumentet.
Akseptanseprøver
- Prøv små positive og negative beløp ved avrundingsgrensen.
- Prøv store summer og mange linjer.
- Prøv null, manglende beløp og ugyldig tekst separat.
- Sammenlign kilde, overføring og mottaker med samme valuta.
- Bevar en forklaring på eventuell avrundingsdifferanse.
Godkjenn løsningen når differanser kan knyttes til den avtalte regelen, ikke til tilfeldige datatypevalg. En toleranse kan varsle små avvik, men bør ikke skjule systematiske feil som vokser med antall poster.
Kontroller fortegn ved samme presisjonsgrense som positive beløp. En kreditnota kan gå gjennom en annen kodevei i klienten. Prøven bør vise at samme dokumenterte avrundingsregel brukes på begge sider, uten at et minus fjernes under tekstkonvertering.
Ved kontroll av ReAI må det aktuelle API-skjemaet og klientens behandling undersøkes sammen. Generisk JSON-støtte er ingen garanti for identisk beregningsresultat. Se testvektorer for små, gjentakbare presisjonsprøver.