This article has been localized into Czech by the community.
Čísla s plovoucí desetinnou čárkou
Čísla s plovoucí desetinnou čárkou jsou čísla, která mají zlomkové části (obvykle vyjádřené desetinnou tečkou). Možná se divíte, proč neexistuje jen jeden datový typ pro práci s čísly (s frakcemi nebo bez frakcí), ale to je proto, že je pro počítač mnohem rychlejší pracovat s celými čísly než s čísly obsahujícími frakce. Proto má smysl je rozlišovat - pokud víte, že budete pracovat pouze s celými čísly, zvolte datový typ celého čísla. Jinak použijte jeden z datových typů s plovoucí desetinnou čárkou, jak je popsáno v tomto článku.
Použití hodnoty s plovoucí desetinnou čárkou je stejně snadné jako použití celého čísla, i když u hodnot s plovoucí desetinnou čárkou existuje mnohem více otázek, které později probereme. Prozatím se podívejme, jak vypadá deklarace jednoho z nejběžněji používaných datových typů s plovoucí desetinnou čárkou: double.
double number;
Stejně jako u celého čísla, můžete samozřejmě přiřadit hodnotu současně s jeho deklarací:
double number = 42.0;
Totéž platí pro typy float a decimal, o kterých si povíme za chvíli, ale zde je notace mírně odlišná:
double doubleVal = 42.0;
float floatVal = 42.0f;
decimal decimalVal = 42.0m;
Všimněte si "f" a "m" za čísly - říká to kompilátoru, že přiřazujeme hodnotu float a decimal. Bez toho by C# interpretovala čísla jako double, která nemohou být automaticky převedena ani na float ani na decimal.
float, double nebo decimal?
Práce s hodnotami s plovoucí desetinnou čárkou v programování vždy vyvolávala mnoho otázek a obav. Například C# má alespoň tři datové typy pro práci s necelými čísly.
- float (alias pro System.Single)
- double (alias pro System.Double)
- decimal (alias pro System.Decimal)
Základní rozdíl může být trochu těžké pochopit, pokud nemáte mnoho znalostí o tom, jak počítač pracuje uvnitř, takže se zde držme praktičtějších věcí.
Obecně rozdíl mezi datovými typy float, double a decimal spočívá v přesnosti a tedy také v tom, kolik paměti je potřeba k jejich uchování. Float je nejméně nákladný - dokáže reprezentovat číslo s až 7 ciframi. Double je přesnější, s až 16 ciframi, zatímco decimal je nejpřesnější, s ohromujícím maximem 29 cifer.
Možná se divíte, na co potřebujete takovou přesnost, ale odpověď zní "matematické věci". Klasický příklad pro pochopení rozdílu je dělení 10 třemi. Většina z nás to udělá v hlavě a řekne, že výsledek je 3,33, ale mnoho lidí také ví, že to není zcela přesné. Skutečná odpověď je 3,33 následovaná řadou dalších trojek - kolik, při provádění tohoto výpočtu v C#, je určeno datovým typem. Podívejte se na tento příklad:
float a = 10f / 3;
Console.WriteLine(a);
double b = 10d / 3;
Console.WriteLine(b);
decimal c = 10m / 3;
Console.WriteLine(c);
Provádím přesně stejný výpočet, ale s různými datovými typy. Výsledek bude vypadat takto:
a: 3.333333
b: 3.33333333333333
c: 3.3333333333333333333333333333
Rozdíl je docela jasný, ale kolik přesnosti skutečně potřebujete pro většinu úkolů?
Jak vybrat
Především musíte zvážit, kolik číslic potřebujete uložit. Float může obsahovat pouze 7 číslic, takže pokud potřebujete větší číslo než to, můžete chtít zvolit raději double nebo decimal.
Za druhé, jak float, tak double budou reprezentovat hodnoty jako aproximaci skutečné hodnoty - jinými slovy, nemusí být srovnatelné až do poslední číslice. To také znamená, že jakmile začnete provádět stále více a více výpočtů s těmito proměnnými, nemusí být už tak přesné, což v podstatě znamená, že dvě hodnoty, které by se měly rovnat, náhle nebudou stejné.
Takže v situacích, kdy je přesnost primárním zájmem, byste měli zvolit typ decimal. Skvělým příkladem je reprezentace finančních čísel (peněz) - nechcete přidat 10 částek do svého účetnictví, jen abyste zjistili, že výsledek není to, co jste očekávali. Na druhou stranu, pokud je důležitější výkon, měli byste zvolit float (pro malá čísla) nebo double (pro větší čísla). Decimal je kvůli své extra přesnosti mnohem pomalejší než float - některé testy ukazují, že je až 20krát pomalejší!
Shrnutí
Při práci s hodnotami s plovoucí desetinnou čárkou byste měli použít datový typ float nebo double, když je přesnost méně důležitá než výkon. Na druhou stranu, pokud chcete maximální možnou přesnost a jste ochotni přijmout nižší úroveň výkonu, měli byste zvolit datový typ decimal - zejména při práci s finančními čísly.
Pokud chcete vědět více o základních rozdílech mezi těmito datovými typy na mnohem detailnější úrovni, měli byste se podívat na tento velmi podrobný článek: Co by každý počítačový vědec měl vědět o aritmetice s plovoucí desetinnou čárkou.