Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Číselné typy s plovoucí desetinou čárkou představují reálná čísla. Všechny číselné typy s plovoucí desetinou čárkou jsou typy hodnot. Jsou to také jednoduché typy a lze je inicializovat pomocí literálů. Všechny číselné typy s plovoucí desetinou čárkou podporují aritmetické operátory, porovnání a rovnosti .
Charakteristiky typů s plovoucí desetinou čárkou
Jazyk C# podporuje následující předdefinované typy s plovoucí desetinou čárkou:
| Typ/klíčové slovo jazyka C# | Přibližný rozsah | Přesnost | Velikost | Typ .NET |
|---|---|---|---|---|
float |
±1,5 x 10−45 až ±3,4 x 1038 | ~6-9 číslic | 4 bajty | System.Single |
double |
±5,0 × 10−324 až ±1,7 × 10308 | ~15-17 číslic | 8 bajtů | System.Double |
decimal |
±1,0 x 10-28 až ±7,9228 x 1028 | 28 až 29 číslic | 16 bajtů | System.Decimal |
V předchozí tabulce je každé klíčové slovo typu jazyka C# z levého sloupce alias pro odpovídající typ .NET. Jsou zaměnitelné. Například následující deklarace deklarují proměnné stejného typu:
double a = 12.3;
System.Double b = 12.3;
Výchozí hodnota každého typu s plovoucí desetinou čárkou je nula, 0. Každý z typů s plovoucí desetinou čárkou má MinValue a MaxValue konstanty, které poskytují minimální a maximální konečnou hodnotu tohoto typu.
double Typy float také poskytují konstanty, které představují nečíslo a nekonečno hodnoty.
double Například typ poskytuje následující konstanty: Double.NaN, Double.NegativeInfinitya Double.PositiveInfinity.
Typ decimal je vhodný, pokud je požadovaný stupeň přesnosti určen počtem číslic napravo od desetinné čárky. Tato čísla se běžně používají ve finančních aplikacích pro částky měny (například 1,00 USD), úrokové sazby (například 2,625%) atd. Dokonce i čísla, která jsou přesná pouze na jednu desetinnou číslici, se zpracovávají přesněji pomocí decimal typu: 0,1, například můžou být přesně reprezentována decimal instancí, zatímco neexistuje double žádná nebo float instance, která přesně představuje hodnotu 0,1. Vzhledem k tomuto rozdílu v číselných typech může při použití double nebo float pro desetinná data dojít k neočekávaným chybám zaokrouhlování. Místo optimalizace výkonu je doubledecimal důležitější než zajištění přesnosti. Všechny rozdíly v výkonu by ale nepoznaly všechny aplikace náročné na výpočty. Dalším možným důvodem, proč se vyhnout, decimal je minimalizovat požadavky na úložiště. Například ML.NET používá float , protože rozdíl mezi 4 bajty a 16 bajty se sčítá pro velmi velké datové sady. Další informace najdete v tématu System.Decimal.
Integrální typy a typy ve výrazu floatdouble můžete kombinovat. V tomto případě jsou integrální typy implicitně převedeny na jeden z typů s plovoucí desetinou čárkou a v případě potřeby float je typ implicitně převeden na double. Výraz se vyhodnotí takto:
- Pokud je
doubleve výrazu typ, výraz se vyhodnotí jakodouble, nebo vboolrelačních a rovnosti porovnání. - Pokud výraz neobsahuje žádný
doubletyp, výraz se vyhodnotí jakofloatnebo vboolrelačních porovnáních a porovnávání rovnosti.
Můžete také kombinovat integrální typy a decimal typ ve výrazu. V tomto případě jsou integrální typy implicitně převedeny na decimal typ a výraz se vyhodnotí jako decimal, nebo bool v relačních a rovnosti porovnání.
Typ nelze kombinovat decimal s float typy ve double výrazu. Pokud v tomto případě chcete provádět aritmetické operace, porovnání nebo rovnosti, musíte operandy explicitně převést z nebo na decimal typ, jak ukazuje následující příklad:
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
K formátování hodnoty s plovoucí desetinnou čárkou můžete použít standardní řetězce číselného formátu nebo vlastní řetězce číselného formátu .
Skutečné literály
Typ skutečného literálu je určen jeho příponou následujícím způsobem:
- Literál bez přípony nebo
Dpříponydje typudouble - Literál s příponou nebo
Fpříponoufje typufloat - Literál s příponou nebo
Mpříponoumje typudecimal
Následující kód ukazuje příklad každého z nich:
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
Předchozí příklad také ukazuje použití _ jako oddělovač číslic. Oddělovač číslic můžete použít se všemi druhy číselných literálů.
Můžete také použít vědecký zápis, to znamená určit exponent část skutečného literálu, jak ukazuje následující příklad:
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
Převody
Existuje pouze jeden implicitní převod mezi číselnými typy s plovoucí desetinou čárkou: od float do double. Pomocí explicitního přetypování ale můžete převést libovolný typ s plovoucí desetinou čárkou na jakýkoli jiný typ s plovoucí desetinou čárkou. Další informace naleznete v tématu Předdefinované číselné převody.
Specifikace jazyka C#
Další informace najdete v následujících částech specifikace jazyka C#: