Čí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 double
decimal
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 double
float
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í jakodouble
, nebo vbool
relačních a rovnosti porovnání. - Pokud výraz neobsahuje žádný
double
typ, výraz se vyhodnotí jakofloat
nebo vbool
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říponyd
je typudouble
- Literál s příponou nebo
F
příponouf
je typufloat
- Literál s příponou nebo
M
příponoum
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#: