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ékelvedouble
bool
.- Ha a kifejezésben nincs
double
típus, akkor a kifejezés a relációs és egyenlőségi összehasonlításokrafloat
bool
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 decimal
a 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 vagyD
utótaggal nem rendelkező literál típusdouble
- A literál és az
f
F
utótag típusafloat
- A literál és az
m
M
utótag típusadecimal
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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: