processing decimal numbers with mpdecimal as a backdrop
***I wrote this lib to free myself from arithmetic problems on large decimals***
[https://speleotrove.com/decimal/](https://speleotrove.com/decimal/)
This part explains why we need it.
Another source that inspired me and that joins what I think 1990
[https://github.com/dnotq/decNumber](https://github.com/dnotq/decNumber)
---
[https://www.bytereef.org/mpdecimal/index.html](https://www.bytereef.org/mpdecimal/index.html)
Include("mpdecimal.h) view build;
you need to mount the mpdecimal package in your system
installation with your package manager or download
validated: by https://speleotrove.com/decimal/
official site thank you for making this standardization available
---
→ 2023-03-27 test decimal 256 - 70 digit and 512 - 142 digit work bank international
CTX_ADDR Communication structure for default common control decimal128 -> MPD_ROUND_HALF_EVEN
openContex() :
it is possible, to have very very large numbers
disable c.mpd_ieee_context but you go out of the norm
DCMLFX includes 3 values
number: mpdecimal structure [*c]
integer: number of integers in front of the point
scale: number of integers behind the point
string: if the scale part is larger than its definition,
it rounds then adds zeros if necessary
(respects the SQL display alignment standard on the left ex: 1.00)
rate: raises a value with the percentage ex ( n = (val x nbr) , val = (n x %1.25)
Function | Description | Pub |
---|---|---|
openContex | Creates icontext internal lib mpdecimal | |
init | Creates Decimal (E,tier , Scal) | x |
deinit | De-allocates the Decimal | x |
isActif | check the area is still active | x |
isNumber | check value is compliant '0-9 + - .' | |
isValide | control number and validity normalize | x |
isOverflow | check if the internal value is out of bounds | x |
[setDcml | give a value (text format) to ".number" | x |
setZero | forces the value 0 to ".number" | x |
isZeros | checks if the value 0 | x [ |
round | two-function round and truncate see finance... | x |
trunc | to a function, truncate without rounding | x |
string | format area if the scale part is larger,it rounds | x |
add | a = a + b a.add(b) | x |
sub | a = a - b | x |
mult | a = a * b | x |
div | a = a / b if b = zeros raises an error | x |
addTo | r = a + b r.addto(a,b) | x |
subTo | r = a - b | x |
multTo | r = a * b | x |
divTo | r = a / b if b = zeros raises an error | x |
floor | r = a | x |
ceil | r = a | x |
rem | r = a / b if b = zeros raises an error | x |
rate | total.rate(prix,nbritem,tax) | x |
cmp | compare a , b returns EQ LT GT | x |
dsperr | practical @panic product in test | x |
[debugContext | displlay context value internal mpdecimal | x [ |
debugPrint | small followed by ".number" | x |
x | ||
Dcmliterator | Struct Iterator | x |
next | next iterator Char(UTF8) | x |
preview | preview iterator Char(UTF8) | x |
iterator | Returns a StringIterator over the String | x |
isUTF8Byte | Checks if byte is part of UTF-8 character | . |
getIndex | Returns the real index of a unicode | . |
getUTF8Size | Returns the UTF-8 character's size | . |
sp; ← 2024-12-17 I have completed the checks and memory leak tests, the functions are reviewed and corrected with the consideration.
→ 2024-12-23 03:13
Big is working on memory leaks.
Now I think it's fixed.
→ 2024-12-19 The build in the library as well as in src-zig is compliant and without redundancy.