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 konstansokkal inicializálhatók. Minden lebegőpontos numerikus típus támogatja az aritmetikai, összehasonlítási és egyenlőségi operátorokat.

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 Pontosság 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 a pénzügyi alkalmazásokban, a pénznemek (például 1,00 USD), a kamatlábak (például 2,625%) és így tovább. 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 fogja észrevétlenül használni. 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ó: 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:

  • double Ha van típus a kifejezésben, akkor a kifejezés a relációs és egyenlőségi összehasonlításokra vagy azokra lesz kiértékelvedoublebool.
  • Ha a kifejezésben nincs double típus, akkor a kifejezés a relációs és egyenlőségi összehasonlításokra floatbool vagy azokra lesz kiértékelve.

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 típus nem keverhető decimal össze 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 típusát az utótag határozza meg az alábbiak szerint:

  • Az utótag nélküli vagy az d utótaggal vagy D utótaggal nem rendelkező literál típus double
  • A literál és az fF utótag típusa float
  • A literál és az mM utótag típusa decimal

Az alábbi kód az egyes példákat 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 számjegyelválasztó használatát is szemlélteti._ A számjegyelválasztót sokféle numerikus literállal használhatja.

Tudományos jelölést is használhat, azaz megadhat egy valódi literál kitevő részét, 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 konverzió 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 öntöttel. 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