Obsah / Utility / TEXTFORM / FloatTrunc
Zdrojový kód: INCLUDE\UTIL\TEXTFORM.INC, UTIL\TEXTFORM.ASM
Související:
FltToTextBuf | Zformátování desetinného čísla do bufferu | |
FltToTextBufN | Délka textu formátovaného desetinného čísla | |
ExpSToTextBuf | Zformátování čísla s exponentem do bufferu, malé "e" | |
ExpCToTextBuf | Zformátování čísla s exponentem do bufferu, velké "E" | |
ExpToTextBufN | Délka textu formátovaného čísla s exponentem |
FloatTrunc - Odstranění koncových nul
Funkce FloatTrunc je interní funkce používaná funkcemi dekódujícími desetinné číslo na text. Zajistí ořezání nevýznamných koncových nul čísla.
|
Na vstupu funkce obsahuje registr EDX ukazatel na poslední bajt mantisy v BCD tvaru (tak, jak ji dekódovala funkce FloatMantBCD). Na výstupu funkce je navrácena v registru ECX skutečná přesnost, tj. skutečný počet desetinných míst pokud se odstraní nevýznamné koncové nuly. Funkce zničí obsah registrů AL a EDX.
|
Funkce bude procházet číslice čísla od konce po jednotlivých číslicích. Maximální možný počet číslic v čísle je 20 (číslo zabírá 10 bajtů, každý bajt má 2 číslice), proto se čítač v registru ECX přednastaví na 20.
V cyklu se testuje nejdříve číslice ve vyšší tetrádě v bajtu - obsah bajtu se načte a testem maskou 0F0h se otestuje zda je nula - není-li, funkce se ukončí s registrem ECX nastaveným na nalezený počet desetinných míst.
Dále se maskou 0Fh testuje číslice v nižší tetrádě bajtu a funkce se opět ukončí při nalezení nenulového čísla. Je-li i druhá číslice nula, ukazatel v bufferu se sníží a pokračuje se dalším průchodem cyklu. Je-li dosaženo konce cyklu, jsou všechny číslice nulové, obsah registru se omezí na 0 jako minimální přesnost pro číslo 0.
Obsah / Utility / TEXTFORM / FloatTrunc