2. Hodnotové typy

2.3. Reálná čísla

Další skupinou hodnotových typů jsou reálná čísla. Kromě označení reálná čísla se také často používá termín „desetinná čísla“, nebo „čísla s plovoucí řádovou čárkou“. Reálné číslo se zobrazuje v tzv. semilogaritmickém tvaru nebo též jako číslo s pohyblivou řádovou čárkou - viz Obrázek 1.

 x=M \ast z^E  

kde:

  • x ... zobrazované číslo

  • M ... mantisa v normalizovaném tvaru <0.5,1)

  • z ... 2

  • E ... exponent <-128,127>

 Zobrazení reálného čísla

Obrázek 1: Zobrazení reálného čísla

 V následující tabulce jsou uvedeny datové typy, které může zvolit pro reálná čísla – viz Tabulka 1. Tabulka datových typů oproti celým číslům obsahuje také přesnost, která určuje počet desetinných míst, na které je možné ukládat hodnoty.

Datový typ

Velikost (počet bytů)

Rozsah

Přesnost (počet číslic)

Přípona (literál)

float

4

±1.5*10−45 ÷ ±3.4*1038

~6÷9

f nebo F

double

8

±5.0*10−324 ÷ ±1.7*10308

~15÷17

d nebo D

decimal

16

±1.0*10-28 ÷ ±7.9228*1028

28÷29

m nebo M

Tabulka 1: Datové typy reálných čísel

Ilustrativní příklad RelnaCislaLiteral
Program RealnaCislaLiteral

  • Popis: Příklad deklarace reálného čísla typu double a float s inicializací a použitím literálu
  • Zadání: Deklarujte v hlavní metodě Main proměnnou s názvem doublePromenna datového typu double a inicializujte ji hodnotou 0.42 s použitím přípony u literálu daného typu. Dále deklarujte další proměnnou s názvem doublePromenna také datového typu double a inicializujte ji stejnou hodnotou, nyní však bez použití literálu. 
    To samé proveďte pro proměnné floatPromenna a floatPromenna2 datového typu float
  • Řešení: Bude postupně probráno v následujícím textu

U datového typu double nemusí být uváděna přípona literálu – viz Kód 1. Všimněte si, že namísto české desetinné čárky musíme použít desetinnou tečku.

U poslední případu deklarace typu float, kdy jsme nepoužili literál nám překladač zahlásil: "Literály typu double nelze implicitně převést na typ float. Chcete-li vytvořit literál tohoto typu, použijte předponu F".

Pamatujte, že F je přípona datového typu float určující, že např. hodnota 0.42 by měla být považováno za datový typ float. Pokud zapomeneme napsat příponu F, bude hodnota 0.42 považována za typ double a náš program se nezkompiluje (neproběhne překlad), protože nemůžeme přiřadit hodnotu jednoho typu k proměnné jiného typu bez přidání dalšího kódu (přetypování). C # je v tomto ohledu velmi přísný. [6]

static void Main(string[] args)
{
    <span style="color: green;">//Deklarace proměnné pro uložení reálných čísel - typ double</span>
    <span style="color: blue;">double</span> <span style="color: #1f377f;">doublePromenna</span> = 0.42D;
    <span style="color: green;">//Deklarace proměnné typu double - bez uvedení přípony u literálu</span>
    <span style="color: blue;">double</span> <span style="color: #1f377f;">doublePromenna2</span> = 0.42;
 
    <span style="color: green;">//Deklarace proměnné pro uložení reálných čísel - typ float </span>
    <span style="color: blue;">float</span> <span style="color: #1f377f;">floatPromenna</span> = 0.42F;
    <span style="color: green;">//Deklarace proměnné typu float - nelze bez uvedení přípony u literálu -> K.O.</span>
    <span style="color: blue;">float</span> <span style="color: #1f377f;">floatPromenna2</span> = 0.42;
}

Kód 1: Příklad deklarace reálné proměnné s použitím přípony u literálu

U desetinných čísel se může při výpočtech stát, že hodnoty mohou být zaokrouhleny nebo mohou být provedeny jiné aproximace (vzpomeňte si na příklad, který ilustroval nepřesné zobrazení reálných čísel v závislosti na datový typech). Pokud tedy potřebujeme zachovat vyšší přesnost, měli bychom použít příponu M aby hodnota zůstala v typu decimal. Typ decimal je využíván zejména pro bankovnictví díky své velké přesnosti.

Ilustrativní příklad FloatLiteral
Program FloatLiteral

  • Popis: Příklad deklarace reálného čísla typu float s inicializací a použitím literálu
  • Zadání: Deklarujte v hlavní metodě Main proměnnou s názvem floatPromenna datového typu float a inicializujte ji hodnotou 0.42 zadanou v semilogaritmickém tvaru. Hodnotu v proměnné vypište
  • Řešení: Bude postupně probráno v následujícím textu

Prvním způsobem, kterým jsme použili pro zápis desetinného čísla je za použití desetinné tečky. Hodnotu reálného čísla lze také zapsat za pomoci tzv. semilogaritmického tvaru např. 0.42 = 42*10-2 = 42e-2 – viz Kód 2. Jak již z předchozího příkladu víme, u hodnoty přiřazované proměnné typu float musíme použít literál. 

static void Main(string[] args)
{
    <span style="color: green;">//Deklarace proměnné typ float - semilogaritmický tvar</span>
    <span style="color: blue;">float</span> <span style="color: #1f377f;">floatPromenna</span> = 42e-2F;
    <span style="color: green;">//Výpis hodnoty proměnné</span>
    <span style="color: #2b91af;">Console</span>.<span style="color: #74531f;">WriteLine</span>(<span style="color: #a31515;">"floatPromenna: {0}", floatPromenna);
    //Čekání na stisk klávesy -> Ukončení programu
    Console.ReadKey();
}

Kód 2: Příklad deklarace reálné proměnné typu float a její inicializace s použitím semilogaritmického tvaru

Ve výstupu např. výpis výsledků početní operace se reálná čísla formátují podle místních zvyklostí, tzn., že pokud je na v operačním systému nastavena česká lokalizace, tak se vypíše česká desetinná čárka, namísto americké desetinné tečky. To samé platí i pro vstup, tj. zadávání reálného čísla jako vstup do programu, budeme zadávat číslo s desetinnou čárkou.

floatPromenna: 0,42

Výstup programu - Kód 2: Výpis reálného čísla zadaného v semilogaritmickém tvaru