Čí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 MinValue má MaxValue 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
doubleve výrazu typ, je výraz vyhodnocen jakodoubleneboboolv porovnání s relačním a rovností. - Pokud
doubleve výrazu není žádný typ, výraz se vyhodnotí jakofloatneboboolv 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
dDpříponou nebo je typu.double - Literál s
fFpříponou nebo je typu.float - Literál s
mMpří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#: