Beépített numerikus konverziók (C#-referencia)
A C# integrál és lebegőpontos numerikus típusokat biztosít. Bármely két numerikus típus között létezik átalakítás, akár implicit, akár explicit. Explicit átalakításhoz cast kifejezést kell használnia.
Implicit numerikus konverziók
Az alábbi táblázat a beépített numerikus típusok közötti előre definiált implicit konverziókat mutatja be:
Forrás | Művelet |
---|---|
sbyte | short , int , long , float double , , decimal vagynint |
bájt | short , ushort , int , uint , long , ulong float , double , decimal , , , nint vagynuint |
Rövid | int , long , float , double vagy decimal , vagy nint |
ushort | int , uint , long , ulong , float double , vagy decimal , nint vagynuint |
Int | long , float , double vagy decimal , nint |
uint | long , ulong , float , double vagy decimal , vagy nuint |
Hosszú | float , double vagy decimal |
ulong | float , double vagy decimal |
Úszó | double |
nint | long , float , double vagy decimal |
nuint | ulong , float , double vagy decimal |
Feljegyzés
Az implicit konverziók a int
, uint
, , ulong
long
, nint
, nuint
float
long
vagy a , nint
ulong
vagy a , , vagy nuint
hogy double
okozhat veszteség a pontosság, de soha nem veszteség egy nagyságrenddel. A többi implicit numerikus konverzió soha nem veszt el semmilyen információt.
Azt is vegye figyelembe, hogy
Minden integrál numerikus típus implicit módon bármely lebegőpontos numerikus típussá konvertálható.
Nincsenek implicit átalakítások a típusokra és
sbyte
abyte
típusokra. Nincsenek implicit konverziók a típusokból ésdecimal
típusokbóldouble
.A típus és
float
double
adecimal
típus között nincsenek implicit konverziók.A típus
int
állandó kifejezésének értéke (például egy egész szám konstans által képviselt érték) implicit módon konvertálhatósbyte
, ,byte
,short
,ushort
uint
,ulong
, vagynint
nuint
, ha a céltípus tartományán belül van:byte a = 13; byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Ahogy az előző példa is mutatja, ha az állandó érték nem a céltípus tartományán belül van, cs0031-es fordítóhiba lép fel.
Explicit numerikus konverziók
Az alábbi táblázat az előre definiált explicit konverziókat mutatja be azon beépített numerikus típusok között, amelyeknél nincs implicit konverzió:
Forrás | Művelet |
---|---|
sbyte | byte , ushort , uint , ulong vagy nuint |
bájt | sbyte |
Rövid | sbyte , byte , ushort , uint , ulong vagy nuint |
ushort | sbyte , byte vagy short |
Int | sbyte , byte , short , ushort uint , , ulong vagynuint |
uint | sbyte , byte , short , ushort , int vagy nint |
Hosszú | sbyte , byte , short , ushort , int uint , ulong , , nint vagynuint |
ulong | sbyte , byte , short , ushort , int uint , long , , nint vagynuint |
Úszó | sbyte , byte , short , ushort , int , uint long , ulong , decimal , , , nint vagynuint |
Dupla | sbyte , byte , short , ushort , int , uint long , ulong , float , , decimal , nint , vagynuint |
tizedes | sbyte , byte , short , ushort , int , uint long , ulong , float , , double , nint , vagynuint |
nint | sbyte , byte , short , ushort , int uint , , ulong vagynuint |
nuint | sbyte , byte , short , ushort , int uint , , long vagynint |
Feljegyzés
A explicit numerikus átalakítás adatvesztést okozhat, vagy kivételt okozhat, általában egy OverflowException.
Vegye figyelembe azt is, hogy:
Ha egy integráltípus értékét egy másik integráltípusra konvertálja, az eredmény a túlcsordulás-ellenőrzési környezettől függ. Egy ellenőrzött környezetben az átalakítás akkor sikeres, ha a forrásérték a céltípus tartományán belül van. Ellenkező esetben egy OverflowException dobás történik. A nem ellenőrzött környezetben az átalakítás mindig sikeres lesz, és a következőképpen halad:
Ha a forrástípus nagyobb a céltípusnál, akkor a forrásértéket csonkolja a rendszer az "extra" legfontosabb bitek elvetésével. Az eredmény ezután a céltípus értékeként lesz kezelve.
Ha a forrástípus kisebb a céltípusnál, akkor a forrásérték vagy előjeles vagy nullával bővített, így a céltípuséval azonos méretű lesz. A forrástípus aláírása esetén a rendszer jelkiterjesztést használ; nulla kiterjesztést használ, ha a forrástípus nincs aláírva. Az eredmény ezután a céltípus értékeként lesz kezelve.
Ha a forrástípus mérete megegyezik a céltípus méretével, akkor a forrásérték a céltípus értékeként lesz kezelve.
Ha egy
decimal
értéket integráltípussá alakít át, a függvény ezt az értéket nullára kerekítve a legközelebbi integrál értékre kerekítve. Ha az eredményként kapott integrálérték kívül esik a céltípus tartományán, a függvény egy OverflowException értéket ad ki.Ha egy
double
vagyfloat
több értéket integráltípussá alakít át, a függvény ezt az értéket nullára kerekítve a legközelebbi integrál értékre kerekítve. Ha az eredményként kapott integrálérték kívül esik a céltípus tartományán, az eredmény a túlcsordulás-ellenőrzési környezettől függ. Egy ellenőrzött környezetben a rendszer eldob egy OverflowException értéket, míg egy nem ellenőrzött környezetben az eredmény a céltípus meghatározatlan értéke.A konvertáláskor
double
float
azdouble
érték a legközelebbifloat
értékre lesz kerekítve. Ha azdouble
érték túl kicsi vagy túl nagy ahhoz, hogy beleférjen afloat
típusba, az eredmény nulla vagy végtelen.Átalakításkor
float
vagydouble
átalakításkordecimal
a forrásérték ábrázolássádecimal
alakul, és szükség esetén a legközelebbi számra kerekítve lesz a 28. tizedesjegy után. A forrásérték értékétől függően az alábbi eredmények egyike fordulhat elő:Ha a forrásérték túl kicsi ahhoz, hogy egyként
decimal
legyen ábrázolva, az eredmény nullává válik.Ha a forrásérték NaN (nem szám), végtelen vagy túl nagy ahhoz, hogy egyként
decimal
legyen ábrázolva, akkor a rendszer egy OverflowException értéket ad vissza.
Az átalakításkor
decimal
float
double
a forrásérték a legközelebbirefloat
vagydouble
az értékre lesz kerekítve.
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: