共用方式為


內建數值轉換 (C# 參考)

C# 提供一組 整數浮點 數值類型。 任何兩個數值類型之間都有轉換,可以是隱含或明確。 您必須使用 轉換表示式 來執行明確的轉換。

隱含數值轉換

下表顯示內建數值類型之間的預先定義隱含轉換:

寄件者 發往
位元組 shortintlong、、floatdecimaldouble、 或nint
位元組 shortushortintuint、、longulongdoublefloat、或 nintdecimalnuint
簡短 intlongfloatdouble、 或 decimalnint
ushort intuintlong、、ulongdoublefloat、 或 decimalnintnuint
int longfloatdouble、 或 decimalnint
uint longulongfloatdouble、 或 decimalnuint
floatdoubledecimal
ulong floatdoubledecimal
浮動 double
nint longfloatdoubledecimal
nuint ulongfloatdoubledecimal

備註

intuint、、、nintulonglong、 或 nuintfloatnuintnintlongulongdouble 的隱含轉換,可能會導致精確度遺失,但絕對不會遺失大小順序。 其他隱含數值轉換永遠不會遺失任何資訊。

另請注意

  • 任何 整數數值類型 都會隱含轉換成任何 浮點數值類型

  • 和型別沒有隱含轉換bytesbyte。 和 decimal 型別沒有隱含轉換double

  • 類型與 floatdouble 類型之間decimal沒有隱含轉換。

  • int別常數表達式的值(例如,以整數常值表示的值)可以隱含地轉換成 sbytebyte、、uintushortshortulongnintnuint,如果它位於目的型別的範圍內:

    byte a = 13;
    byte b = 300;  // CS0031: Constant value '300' cannot be converted to a 'byte'
    

    如上述範例所示,如果常數值不在目的地類型的範圍內,就會發生編譯程式錯誤 CS0031

明確數值轉換

下表顯示內建數值類型之間沒有 隱含轉換的預先定義明確轉換:

寄件者 發往
位元組 byteushortuintulongnuint
位元組 sbyte
簡短 sbytebyteushortuintulongnuint
ushort sbytebyteshort
int sbytebyteshort、、ushortulonguint、 或nuint
uint sbytebyteshortushortintnint
sbytebyteshortushortintuintulong、、 或 nintnuint
ulong sbytebyteshortushortintuintlong、、 或 nintnuint
浮動 sbytebyteshortushort、、intuintulonglong、或 nintdecimalnuint
雙倍 sbytebyteshortushort、、、floatuintlongintulong、或 nintdecimalnuint
十進位 sbytebyteshortushort、、、floatuintlongintulong、或 nintdoublenuint
nint sbytebyteshort、、ushortintulonguint、 或nuint
nuint sbytebyteshort、、ushortintlonguint、 或nint

備註

明確的數值轉換可能會導致資料遺失或擲回例外狀況,通常是 OverflowException

另請注意:

  • 當您將整數類型的值轉換成另一個整數類型時,結果取決於 溢位檢查內容。 在核取的內容中,如果來源值在目的地類型範圍內,轉換就會成功。 否則會拋出 OverflowException。 在未核取的內容中,轉換一律會成功,然後繼續進行,如下所示:

    • 如果來源類型大於目的地類型,則會捨棄其「額外」最重要的位來截斷來源值。 然後,結果將被視為目的地類型的值。

    • 如果來源類型小於目的地類型,則來源值會是符號擴充或零延伸,使其大小與目的地類型相同。 如果來源類型已簽署,則會使用 Sign-extension;如果來源類型為不帶正負號,則會使用零延伸模組。 然後,結果將被視為目的地類型的值。

    • 如果來源類型的大小與目的地類型相同,則來源值會被視為目的地類型的值。

  • 當您將 decimal 值轉換成整數類型時,這個值會四捨五入為零到最接近的整數值。 如果產生的整數值超出目的型別的範圍, OverflowException 則會擲回 。

  • 當您將 或 float 值轉換成double整數類型時,這個值會四捨五入為零到最接近的整數值。 如果產生的整數值超出目的類型的範圍,則結果取決於 溢位檢查內容。 在已檢查的內容中, OverflowException 會擲回 ,而在未核取的內容中,結果是目的地類型的未指定值。

  • 當您轉換成 doublefloat時,值 double 會四捨五入為最 float 接近的值。 double如果值太小或太大而無法放入float類型中,則結果為零或無限大。

  • 當您將 或 doubledecimal轉換成 float 時,來源值會轉換成decimal表示,並視需要捨入到第 28 個小數點之後最接近的數位。 視來源值的值而定,可能會發生下列其中一個結果:

    • 如果來源值太小而無法表示為 decimal,則結果會變成零。

    • 如果來源值為 NaN(不是數位)、無限大或太大而無法表示為 decimalOverflowException 則會擲回 。

  • 當您轉換成 decimalfloatdouble時,來源值會分別四捨五入為最 float 接近或 double 值。

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格的下列幾節:

另請參閱