Formát čísel pre funkciu CSng
Funkcia CSng vrácia racionálne čísla s menšou dĺžkou a presnosťou. Premenná typu Single ma rozsah od +/- 1,4E-45 až +/-3,4E38. Aké argumenty použiť si ukážeme v prvom príklade.
1. príklad: Testujeme formát argumentov pre funkciu CSng
Sub macro On Error Resume Next Dim i As Integer Dim retazec As String Dim pole() pole() = Array(22, -98, -8.1, -289.789884005, 15682.45958, 178,1E9, 215.4E-10, 235.14E-33, "p8.31", "154.8889", "-787.22", "898.77", "569.78998pol", "-89898.7895sg", 454.87E32, "15.22", 15.22) For i = LBound(pole()) To UBound(pole()) retazec = retazec & i+1 & " CSng(" & pole(i) & ") = " retazec = retazec & CSng(pole(i)) retazec = retazec & Chr(10) Next MsgBox retazec End Sub
Rozbor makra:
Formát čísel pre funkciu CDbl
Funkcia CDbl vracia typ premennej Double. Narozdiel od Single má Double väčší rozsah a to od +/-4.9E-324 až 1.8E308, čo nám ponúkne omnoho väčšie škálovanie s plávajúcou desatinnou čiarkou oproti premennej Single.
2. príklad: Formát čísel pre funkciu CDbl
Sub macro On Error Resume Next Dim i As Integer Dim retazec As String Dim pole() pole() = Array(22, -98, -8.1, -289.789884005, 15682.45958, 178,1E9, 215.4E-10, 235.14E-33, "p8.31", "154.8889", "-787.22", "898.77", "569.78998pol", "-89898.7895sg", 454.87E32, "15.22", 15.22, 1545.45E125, -4546.48E-128, 45.45E200, -4.45E-242, 12.4E301, 14.7E-302) For i = LBound(pole()) To UBound(pole()) retazec = retazec & i+1 & " CDbl(" & pole(i) & ") = " retazec = retazec & CDbl(pole(i)) retazec = retazec & Chr(10) Next MsgBox retazec End Sub
Rozbor makra:
Funkcia CDbl funguje rovnako ako funkcia CSng, len s tým rozdielom, že vracia premennú typu Double.
Formát výrazov pre funkciu CBool
Funkcia CBool po vyhodnotení výrazu vracia pravdivostnú hodnotu. Otázkou je, čo všetko vie vyhodnotiť táto funkcia? To si ukážeme v treťom príklade.
3. príklad: Formát výrazov pre funkciu CBool
Sub macro On Error Resume Next Dim i As Integer Dim retazec As String Dim pole() Dim a, b, c, d, e, f As Integer a = 12 : b = 10 : c = 14 : d = 11 : e = 14 : f = 15 pole() = Array(0 ,-1, 15, 12.7, "0", "189", "k785", "8785loiuu", "4451.4558uxfi", -1818, -145.155, "-klp7178", "-785hm", "-7595.78889", "-155.144pklp", 20 < 15, 10 < 12, 48 > 12, 15 = 14, 28 = 28, 25 <> 14, 881 <> 881, "25 < 24", "999 <> 888", a = b, c < e , d > f, f <> a, c = e, a <= d, f >= a, &HA <> &HA2) For i = LBound(pole()) To UBound(pole()) retazec = retazec & i+1 & " CBool(" & pole(i) & ") = " retazec = retazec & CBool(pole(i)) retazec = retazec & Chr(10) Next Msgbox retazec End Sub
Rozbor makra:
1 CBool(0) = False – číslo 0 je návratová hodnota pre False
2 CBool(-1) = True – číslo -1 je návratová hodnota pre True
4 CBool(12,7) = True – okrem čísla 0 vráti True vždy bez ohľadu nato, či je číslo celé alebo racionálne
5 CBool(0) = False – funkcia vie vydolovať číslo aj z reťazca
6 CBool(189) = True – vracia to čo má
7 CBool(k785) = – síce funkcia vie zobrať číslo z reťazca, ale ak je zapísané numerický
15 CBool(-155.144pklp) = – podobne ako bod 7 a rovnaký dôvod platí pre všetky zápisy, ktoré nedali žiadny výsledok
16 CBool(0) = False – klasické porovnávanie čísel
23 CBool(25 < 24) = – je síce pravda, že funkcia vie získať číslo z reťazca, ale nenumerické znaky už nie
25 CBool(False) = False – porovnávanie prostredníctvom zadeklárovaných premenných
32 CBool(-1) = True – posledný príklad slúži ako ukážka, že u hexadecimálnych čísel platia rovnaké pravidla ako u desiatkových