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

Číselné typy s plovoucí desetinnou čárkou reprezentují reálné číslo. Všechny číselné typy s plovoucí desetinnou čárkou jsou typy hodnot. Jsou to také jednoduché typy a lze je inicializovat pomocí literálů. Všechny číselné typy s plovoucí desetinnou čárkou podporují operátory aritmetické, porovnánía rovnosti .

Vlastnosti typů s plovoucí desetinnou čárkou

Jazyk C# podporuje následující předdefinované typy s plovoucí desetinnou čárkou:

Typ/klíčové slovo jazyka C# Přibližný rozsah Přesnost Velikost Typ .NET
float ± 1,5 × 10− 45 až ± 3,4 × 1038 ~ 6-9 číslic 4 bajty System.Single
double ± 5,0 × 10− 324 do ± 1,7 × 10308 ~ 15-17 číslic 8 bajtů System.Double
decimal ± 1,0 × 10– 28 až 7,9228 × 1028 28-29 číslic 16 bajtů System.Decimal

V předchozí tabulce je každé klíčové slovo typu C# ze sloupce úplně vlevo alias pro odpovídající typ rozhraní .NET. Jsou zaměnitelné. Například následující deklarace deklaruje proměnné stejného typu:

double a = 12.3;
System.Double b = 12.3;

Výchozí hodnota každého typu s plovoucí desetinnou čárkou je nula, 0 . Každý z typů s plovoucí desetinnou čárkou MinValueMaxValue konstanty a, které poskytují minimální a maximální konečnou hodnotu tohoto typu. floatTypy a double také poskytují konstanty, které představují hodnoty nečíselné a nekonečno. Například double Typ poskytuje následující konstanty: Double.NaN , Double.NegativeInfinity , a Double.PositiveInfinity .

decimalTyp je vhodný v případě, že požadovaný stupeň přesnosti určuje počet číslic vpravo od desetinné čárky. Tato čísla se běžně používají ve finančních aplikacích, v případě peněžních částek (například $1,00), úrokových sazeb (například 2,625%) a tak dále. Sudá čísla, která jsou přesnější pouze pro jednu desítkovou číslici, jsou zpracována přesněji decimal typem: 0,1, například, může být přesně reprezentovaná decimal instancí, zatímco to není žádné double nebo float instance, která přesně reprezentuje 0,1. Z důvodu tohoto rozdílu v číselných typech může při aritmetických výpočtech dojít k neočekávaným chybám zaokrouhlení při použití double nebo float pro Desítková data. Místo toho, abyste mohli double optimalizovat výkon, je možné použít místo toho, decimal aby se zajistila přesnost. Nicméně jakýkoli rozdíl ve výkonu by neinformoval o všech výjimkách aplikací náročných na výpočty. Dalším možným důvodem pro zamezení decimal je minimalizace požadavků na úložiště. například ML .net používá, float protože rozdíl mezi 4 bajty a 16 bajty sečítá pro velmi velké sady dat. Další informace naleznete v tématu System.Decimal.

Můžete kombinovat integrální typy a float double typy a ve výrazu. V tomto případě jsou celočíselné typy implicitně převedeny na jeden z typů s plovoucí desetinnou čá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, je výraz vyhodnocen jako double nebo bool v porovnání s relačním a rovností.
  • Pokud double ve výrazu není žádný typ, výraz se vyhodnotí jako float nebo bool v 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 celočíselné typy implicitně převedeny na decimal typ a výraz je vyhodnocen jako decimal nebo bool v porovnání s relačním a rovností.

Ve výrazu nelze kombinovat decimal typ s float typy a double . V takovém případě, pokud chcete provádět operace aritmetické, porovnání nebo rovnosti, je nutné explicitně převést operandy buď 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 buď Standardní číselné formátovací řetězce , nebo řetězce vlastního číselného formátu .

Reálné literály

Typ reálného literálu je určen jeho příponou takto:

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

Následující kód ukazuje příklad každé 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, který je podporován počínaje jazykem C# 7,0. Oddělovač číslic se dá použít u všech druhů číselných literálů.

Můžete také použít vědeckou notaci, to znamená, že určíte exponent, který je součástí reálné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í desetinnou čárkou: od float do double . Můžete však převést libovolný typ s plovoucí desetinnou čárkou na jakýkoli jiný typ s plovoucí desetinnou čárkou s explicitním přetypováním. Další informace najdete v tématu integrované číselné převody.

specifikace jazyka C#

Další informace naleznete v následujících oddílech specifikace jazyka C#:

Viz také