30. Behandelen van geldbedragen (en decimale bedragen) in Brocade

Auteur Richard Philips
Aanmaak 24 maart 2010
Oud BVV nr 2088

30.1. Abstract

Dit document beschrijft hoe geldbedragen (en decimale bedragen) kunnen worden behandeld in Brocade.

30.2. Opslag in de databank

Decimale getallen worden in de databank opgeslagen in een variant op de Amerikaanse notatie. Dit is ook de standaard die in de meeste programeertalen wordt gebruikt.

Met reguliere uitdrukkingen kan deze notatie worden voorgesteld als:

[-]?[1-9][0-9]{0,31}|[-]?[1-9][0-9]*[.][0-9]{0,31}[1-9]|[-]?[.][0-9]{0,31}[1-9]

Brocade garandeert enkel getallen met maximaal 32 cijfers na de komma. (In de praktijk betekent dit aanzienlijk meer: GT.M werkt met 42 cijfers na de komma, Cache kan 128 cijfers na de komma aan.

Deze voorstelling heeft als eigenschap dat, in M, een variabele x die gelijkgesteld wordt aan dergelijke waarde, de eigenschap heeft dat x = +x.

Voorbeelden:

12323
-482346
587.3877
-087213.40236
.32094
-.0044857

30.3. Menselijke input van decimale getallen

Computergebruikers kunnen werken onder verschillende Locales. Daarin wordt bepaald hoe geldbedragen worden ingevuld.

In dit document wordt een pragmatisch voorstel geformuleerd voor Brocade.

  • Een Brocade server werkt met juist 1 manier om decimale getallen in te voeren en te tonen op de schermen.
  • Enkel het decimale punt kan variëren en kan 2 waarden aannemen: . of ,. Is het decimale punt gelijk aan ., dan kan , worden gebruikt als scheidingsteken tussen 1000-tallen. Is het decimale punt gelijk aan ,, dan kan . worden gebruikt als scheidingsteken tussen 1000-tallen.
  • De keuze van het decimale punt wordt gemaakt door de registry-waarde lc-decimalseparator. Deze waarde wordt standaard op , gezet, maar kan worden aangepast. Na verandering van deze registry waarde dient qtech -admin sweep te worden uitgevoerd.
  •   en _ kunnen overal in het decimale getal worden gebruikt om dit getal duidelijker te maken voor menselijke input.
  • De keuze van de valuta eenheid is geen onderdeel van het decimale bedrag.
  • Indien negatieve getallen toegelaten zijn, dan moet dit in de HTML code expliciet worden aangestipt.

30.4. Macro’s en X-files

Text input velden waarin decimale getallen worden opgeslagen worden speciaal gemarkeerd:

m4_documentElementInputMoney
m4_documentElementAutoMoney
m4_serviceDocumentElementInputMoney

Deze velden gedragen zich als gewone <input type="text"> velden. Er is wel javascript aan gekoppeld dat verhinderd dat er ontoelaatbare gegevens worden ingetikt. Aan dit veld kunnen er nog 2 optionele attributen worden meegegeven:

data-prefix
Staat de waarde op 1, dan kan de decimale waarde beginnen met een -.
data-suffix
Staat de waarde op 1, dan kan de decimale waarde eindigen met een %. In dit geval is het aan de verwerkende software om dit % teken te interpreteren.

Voorbeelden:

m4_documentElementInputMoney(FDprice,x4_varruntime(FDprice),size="5" maxlength="20",overwrite,bb-ti)
m4_documentElementInputMoney(FDprice,x4_varruntime(FDprice),data-prefix="1" size="5" maxlength="20",overwrite,bb-ti)
m4_documentElementInputMoney(FDprice,x4_varruntime(FDprice),data-suffix="1" size="5" maxlength="20",overwrite,bb-ti)

30.5. Verwerking van decimale getallen

Van databank naar display
Gebruik de macro: m4_formatNumberDisplay($number,$after)

Waarschuwing

Deze macro overschrijft de waarde $number. $after is het aantal cijfers na het decimale teken is standaard 2.

Van invoer naar databankformaat
Gebruik de macro: m4_formatNumberStore($number)

Waarschuwing

Deze macro overschrijft de waarde $number.

30.6. HTML5

In HTML5 zijn er faciliteiten voorhanden om getallen in te voeren:

<input type="number">

Dit is een interessante feature. De werking is echter gebaseerd op de Locale van de browser/OS. Dit betekent dat verschillende Brocade gebruikers op hetzelfde systeem misschien wel op een verschillende manier gaan werken.