Čí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 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 nebo klíčové slovo jazyka C# Přibližný rozsah Počet deset. míst 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 na webu System.Decimal.

Integrální typy a typy ve výrazu doublefloat 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 double, nebo v bool relačních a rovnosti porovnání.
  • 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

Typ skutečného literálu je určen jeho příponou následujícím způsobem:

  • Literál bez přípony nebo D přípony d je typudouble
  • Literál s příponou nebo F příponou f je typufloat
  • Literál s příponou nebo M příponou m je 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#:

Viz také