Lebegőpontos numerikus típusok (C# referencia)

A lebegőpontos numerikus típusok valós számokat jelölnek. Minden lebegőpontos numerikus típus értéktípus. Ezek szintén egyszerű típusok, és konstansok használatával inicializálhatja őket. Minden lebegőpontos numerikus típus támogatja az aritmetikai, összehasonlítási és egyenlőségi operátorokat.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

A lebegőpontos típusok jellemzői

A C# az alábbi előre definiált lebegőpontos típusokat támogatja:

C# típus/kulcsszó Hozzávetőleges tartomány Precizitás Méret .NET-típus
float ±1,5 x 10−45 ±3,4 x 1038 ~6-9 számjegy 4 bájt System.Single
double ±5.0 × 10−324 ±1,7 × 10308 ~15-17 számjegy 8 bájt System.Double
decimal ±1.0 x 10-28 ± 7.9228 x 1028 28-29 számjegy 16 bájt System.Decimal

Az előző táblázatban a bal szélső oszlop minden C# típusú kulcsszója a megfelelő .NET-típus aliasa. Felcserélhetők. A következő deklarációk például azonos típusú változókat deklarálnak:

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

Minden lebegőpontos típus alapértelmezett értéke nulla. 0 A lebegőpontos típusok mindegyike rendelkezik olyan MinValue állandókkal és MaxValue állandókkal, amelyek az adott típus minimális és maximális véges értékét adják meg. A float típusok olyan double állandókat is biztosítanak, amelyek nem szám- és végtelenértékeket jelölnek. A típus például a double következő állandókat tartalmazza: Double.NaN, Double.NegativeInfinityés Double.PositiveInfinity.

A decimal típus akkor megfelelő, ha a szükséges pontossági fokot a tizedesvessző jobb oldalán lévő számjegyek száma határozza meg. Ezeket a számokat gyakran használják pénzügyi alkalmazásokban, pénznemösszegekhez (például 1,00 usd), kamatlábakhoz (például 2,625%) stb. A csak egy tizedesjegyre pontos számokat a típus pontosabban decimal kezeli: a 0,1 például pontosan egy példányt decimal jelölhet, míg nincs double vagy float példány, amely pontosan 0,1-et jelöl. A numerikus típusok különbsége miatt váratlan kerekítési hibák léphetnek fel az aritmetikai számításokban a használatkor double vagy float a decimális adatok esetében. double A teljesítmény optimalizálása a decimal pontosság biztosításánál fontosabb helyett használható. A teljesítménybeli különbségeket azonban a számításigényes alkalmazásokon kívüli összes alkalmazás nem észleli. Egy másik lehetséges oka annak, hogy elkerüljük decimal a tárolási követelmények minimalizálását. ML.NET például azért használjafloat, mert a 4 és 16 bájt közötti különbség nagyon nagy adatkészletekhez ad hozzá. További információért lásd System.Decimal.

Az integráltípusokat és a float kifejezésben szereplő típusokat double kombinálhatja. Ebben az esetben a rendszer implicit módon konvertálja az integráltípusokat a lebegőpontos típusok egyikére, és szükség esetén a float típus implicit módon lesz átalakítva double. A kifejezés kiértékelése a következőképpen történik:

  • Ha van egy double típus a kifejezésben, a kifejezés a relációs és egyenlőségi összehasonlítások alapján vagy azokra bool lesz kiértékelvedouble.
  • double Ha nincs típus a kifejezésben, akkor a kifejezés a relációs és egyenlőségi összehasonlítások alapján vagy azokra bool lesz kiértékelvefloat.

Az integráltípusokat és a decimal típust is kombinálhatja egy kifejezésben. Ebben az esetben a rendszer implicit módon átalakítja az integráltípusokat decimala decimal típusra, és a kifejezés a relációs és egyenlőségi összehasonlításokra, illetve bool azokra lesz kiértékelve.

A kifejezést nem lehet összekeverni decimal a float kifejezésben szereplő típusokkal és double típusokkal. Ebben az esetben, ha számtani, összehasonlítási vagy egyenlőségi műveleteket szeretne végrehajtani, explicit módon át kell alakítania az operandusokat a típusból vagy típusba decimal , ahogy az alábbi példa mutatja:

double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);

A lebegőpontos értékek formázásához használhat standard numerikus formázási sztringeket vagy egyéni numerikus formázási sztringeket .

Valós literálok

A valódi literál utótagja határozza meg a típusát:

  • Az utótag nélküli, illetve az d utótaggal vagy D utótaggal nem rendelkező literál egy double.
  • A literál az utótaggal vagy F az f utótaggal egy float.
  • A literál az utótaggal vagy M az m utótaggal egy decimal.

Az alábbi kód az egyes típusokat mutatja be:

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;

Az előző példa a _. A számjegyelválasztót sokféle numerikus literállal használhatja.

Tudományos jelölést is használhat, amely egy valódi literál kitevő részét adja meg, ahogy az alábbi példa is mutatja:

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

Konverziók

A lebegőpontos numerikus típusok között csak egy implicit átalakítás van: a forrásból float a másikba double. A lebegőpontos típusokat azonban bármilyen más lebegőpontos típussá alakíthatja a explicit leadással. További információ: Beépített numerikus konverziók.

C# nyelvspecifikáció

További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál:

Lásd még