Sdílet prostřednictvím


Číselné typy s plovoucí desetinou čárkou (referenční dokumentace jazyka C#)

Čí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 můžete je inicializovat pomocí literálů. Všechny číselné typy s plovoucí desetinou čárkou podporují aritmetické operátory, porovnání a rovnosti .

Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.

Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.

Návod

Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.

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. float Typy double 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. Jakýkoli rozdíl v výkonu ale není nijak ovlivněn všemi aplikacemi náročnými 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 double ve výrazu typ, výraz se vyhodnotí jako doublenebo v bool relačních porovnáních a porovnávání rovnosti.
  • Pokud výraz neobsahuje žádný double typ, výraz se vyhodnotí jako floatnebo v bool relač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

Přípona skutečného literálu určuje jeho typ:

  • Literál bez přípony nebo D přípony d je double.
  • Literál s příponou f nebo F příponou floatje .
  • Literál s příponou m nebo M příponou decimalje .

Následující kód ukazuje příklad každého typu:

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, který určuje 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í však 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#:

Viz také