Programovanie makier v LibreOffice: Formátovanie čísel (1) – funkcie CInt a CLng

Vývoj Formátovanie čísel bolo vždy vedou. Pri využívaní rôznych funkcii často premýšľame, aké tvary argumentov (napr. čísel) ešte funkcia dokáže spracovať a ktoré nie. V tomto článku sa zameriame bližšie na funkcie CInt a CLng.   

Format desiatkových a hexadecimálnych čísel pre funkciu CInt

Skúsme sa pozrieť na rôzne argumenty, ktorými môžeme nakŕmiť funkciu CInt. Pre zopakovanie, CInt vracia celé čísla. V prvom príklade sa pozrieme na rôzne tvary desiatkových čísel, ktoré môžeme použiť vo funkcii CInt.

1. príklad: Formát desiatkových čísel pre funkciu CInt

Sub macro   

On Error Resume Next

Dim i As Integer
Dim retazec As String
Dim pole()

pole() = Array(10, 5.4, 14.55, "36", "p38", "545lop", "565.48jok", -468, -25.44, "-p454", "-15ldl", "-151.15421", "-155.144pklp", 30000000, -455555555, "54515554",  "-25621446452")

For i = LBound(pole()) To UBound(pole())
        retazec = retazec & i+1 & " CInt(" & pole(i) & ") = "
        retazec = retazec & CInt(pole(i))
        retazec = retazec & Chr(10)
Next 

Msgbox retazec

End Sub

Výsledok makra Výsledok makra

Rozbor makra: Vytvorili sme program, kde testujeme viacero možností. A nielen tie správne. Z toho dôvodu sme pridali do makra On Error Resume Next, aby nám samotný program nespadol. Miesto toho v bodoch si ukážeme najkritickejšie chyby a postrehy.

4 CInt(36) = 36 – to že je číslo zabalené do reťazca, nie je problém

5 CInt(p38) = 0 – p nie je celé číslo

14 CInt(30000000) = – a máme problém, keďže celé číslo má rozsah od –32 768 do 32 767, došlo k pretečeniu

V 15, 16 a 17 nastáva rovnaká situácia ako pri 14.

Fajn, desiatkové čísla máme za sebou, skúsme si zaexperimentovať s hexadecimálnymi číslami. Poďme nato.

2. príklad: Formát hexadecimálnych čísel pre funkciu CInt

Sub macro 

On Error Resume Next

Dim i As Integer
Dim retazec As String
Dim pole()

pole() = Array(&HA, &H1A, &H3B, &HDE, &H1112, &H5EFD, &HA8A2)

For i = LBound(pole()) To UBound(pole())
        retazec = retazec & i+1 & " CInt(" & pole(i) & ") = "
        retazec = retazec & CInt(pole(i))
        retazec = retazec & Chr(10)
Next 

Msgbox retazec

End Sub

Výsledok programu Výsledok programu

Rozbor programu:

Na definovanie hexadecimálneho čísla použijeme formulu &H. Po tejto formule nasleduje samotný hexadecimálny zápis konkrétneho čísla.

7 CInt(43170) = – opäť nastáva pretečenie

Format desiatkových a hexadecimálnych čísel pre funkciu CLng

Funkcia CLng oproti CInt sa vyznačuje tým, že vracia celé dlhé čísla. Rozsah celých dlhých čísel je od  –2 147 483 648 až 2 147 483 647, čo nám dáva viac možností ako obyčajné celé číslo. Pozrime si príklad a možností, ktoré nám celé dlhé číslo poskytuje.

3. príklad: Formát desiatkových čísel pre funkciu CLng

Sub macro 

On Error Resume Next

Dim i As Integer
Dim retazec As String
Dim pole()

pole() = Array(25, 11.7, 17.45, "4578", "kh488", "458polh", "455.458sac", -4982, -154.447, "-vdsd5545", "-787878vvv", "-454.4486", "-787.125vdpdp", 2545878, -7854625, "56548978", "-89852354", "785654526", "-456245978", "4568745891", "-8787878787")

For i = LBound(pole()) To UBound(pole())
        retazec = retazec & i+1 & " CLng(" & pole(i) & ") = "
        retazec = retazec & CLng(pole(i))
        retazec = retazec & Chr(10)
Next 

Msgbox retazec

End Sub

Výsledok programu Výsledok programu

Rozbor makra:

20 CLng(4568745891) = – mimo rozsah celého dlhého čísla

21 CLng(-8787878787) = – mimo rozsah celého dlhého čísla

Neminú nás ani hexadecimálne čísla pre funkciu CLng.

4. program: Formát hexadecimálnych čísel pre funkciu CLng

Sub macro   

On Error Resume Next

Dim i As Integer
Dim retazec As String
Dim pole()

pole() = Array(&HB, &HC3, &H3A8, &H7F1D, &HB4EDF, &H5AB9F4, &HAAACCC7)

For i = LBound(pole()) To UBound(pole())
        retazec = retazec & i+1 & " CLng(" & pole(i) & ") = "
        retazec = retazec & CLng(pole(i))
        retazec = retazec & Chr(10)
Next 

Msgbox retazec

End Sub

Výsledok programu Výsledok programu

(Jako ve škole) Průměr: 1.00 | Hodnotilo: 2
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz