C#數(shù)值轉(zhuǎn)換-顯式數(shù)值轉(zhuǎn)換表(參考)
什么是顯式轉(zhuǎn)換
Explicit Conversion
就是在將一種類型轉(zhuǎn)換成另外一種類型時(shí),需要額外的代碼來(lái)完成這種轉(zhuǎn)換。
int n = 1;
byte b = (byte)n; // 正確,顯式轉(zhuǎn)換
byte b2 = n; // 錯(cuò)誤
顯式轉(zhuǎn)換需要注意,它的結(jié)果不一定是我們想要的。
int n = 256;
byte b = (byte)n; // 結(jié)果是 0
上面的結(jié)果是 0,因?yàn)槌^ 255 了,它就從 0 開始;
如果 n 是 257,那么 b 就是 1;
如果 n 是 258,那么 b 就是 2;
……
由此還得說(shuō)下 Convert,Convert 這個(gè)類用來(lái)轉(zhuǎn)換類型,它有很多方法,比如 ToInt32,就是轉(zhuǎn)換成 int。它涉及的類型跨度很大,比如可將 object、string 等轉(zhuǎn)換成 int,而 (int) 則只能將數(shù)字類型轉(zhuǎn)換成 int。
更多相關(guān)內(nèi)容,請(qǐng)參見 Convert、Parse、TryParse、(int) 的區(qū)別。
顯式數(shù)值轉(zhuǎn)換表(摘自 MSDN)
|
從 |
到 |
|---|---|
|
sbyte |
byte、ushort、uint、ulong 或 char |
|
byte |
Sbyte 或者char |
|
short |
sbyte、byte、ushort、uint、ulong 或 char |
|
ushort |
sbyte、byte、short 或 char |
|
int |
sbyte、byte、short、ushort、uint、ulong 或 char |
|
uint |
sbyte、byte、short、ushort、int 或 char |
|
long |
sbyte、byte、short、ushort、int、uint、ulong 或 char |
|
ulong |
sbyte、byte、short、ushort、int、uint、long 或 char |
|
char |
sbyte、byte 或 short |
|
float |
sbyte、byte、short、ushort、int、uint、long、ulong、char 或 decimal |
|
double |
sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 decimal |
|
decimal |
sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 double |
備注(摘自 MSDN)
顯式數(shù)值轉(zhuǎn)換可能導(dǎo)致精度損失或引發(fā)異常。
將 decimal 值轉(zhuǎn)換為整型時(shí),該值將舍入為與零最接近的整數(shù)值。如果結(jié)果整數(shù)值超出目標(biāo)類型的范圍,則會(huì)引發(fā) OverflowException。
將 double 或 float 值轉(zhuǎn)換為整型時(shí),值會(huì)被截?cái)唷H绻摻Y(jié)果整數(shù)值超出了目標(biāo)值的范圍,其結(jié)果將取決于溢出檢查上下文。在 checked 上下文中,將引發(fā) OverflowException;而在 unchecked 上下文中,結(jié)果將是一個(gè)未指定的目標(biāo)類型的值。
將 double 轉(zhuǎn)換為 float 時(shí),double 值將舍入為最接近的 float 值。如果 double 值因過小或過大而使目標(biāo)類型無(wú)法容納它,則結(jié)果將為零或無(wú)窮大。
將 float 或 double 轉(zhuǎn)換為 decimal 時(shí),源值將轉(zhuǎn)換為 decimal 表示形式,并舍入為第 28 個(gè)小數(shù)位之后最接近的數(shù)(如果需要)。根據(jù)源值的不同,可能產(chǎn)生以下結(jié)果:
如果源值因過小而無(wú)法表示為 decimal,那么結(jié)果將為零。
如果源值為 NaN(非數(shù)字值)、無(wú)窮大或因過大而無(wú)法表示為 decimal,則會(huì)引發(fā) OverflowException。
將 decimal 轉(zhuǎn)換為 float 或 double 時(shí),decimal 值將舍入為最接近的 double 或 float 值。
相關(guān)文章
詳解.NET 6如何實(shí)現(xiàn)獲取當(dāng)前登錄用戶信息
這篇文章主要介紹了.NET 6在應(yīng)用開發(fā)時(shí)是如何實(shí)現(xiàn)當(dāng)前登陸用戶信息獲取的,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-01-01
Unity3D使用GL實(shí)現(xiàn)圖案解鎖功能
這篇文章主要為大家詳細(xì)介紹了Unity3D使用GL實(shí)現(xiàn)圖案解鎖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
C#實(shí)現(xiàn)讀取DataSet數(shù)據(jù)并顯示在ListView控件中的方法
這篇文章主要介紹了C#實(shí)現(xiàn)讀取DataSet數(shù)據(jù)并顯示在ListView控件中的方法,涉及C#操作DataSet及ListView控件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
vs2019 實(shí)現(xiàn)C#調(diào)用c++的dll兩種方法
這篇文章主要介紹了vs2019 實(shí)現(xiàn)C#調(diào)用c++的dll兩種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
基于Unity實(shí)現(xiàn)2D邊緣檢測(cè)
這篇文章主要介紹了如何利用Unity實(shí)現(xiàn)2D邊緣檢測(cè),從而達(dá)到人物描邊效果。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-04-04

