明示的な数値変換の一覧表 (C# リファレンス)Explicit numeric conversions table (C# Reference)

次の表では、暗黙的な変換がない .NET 数値型間で事前定義されている明示的変換がまとめてあります。The following table shows the predefined explicit conversions between .NET numeric types for which there is no implicit conversion.

FromFrom 終了To
sbytesbyte byteushortuintulong、または charbyte, ushort, uint, ulong, or char
bytebyte sbyte または charsbyte or char
shortshort sbytebyteushortuintulong、または charsbyte, byte, ushort, uint, ulong, or char
ushortushort sbytebyteshort、または charsbyte, byte, short, or char
intint sbytebyteshortushortuintulong、または charsbyte, byte, short, ushort, uint, ulong,or char
uintuint sbytebyteshortushortint、または charsbyte, byte, short, ushort, int, or char
longlong sbytebyteshortushortintuintulong、または charsbyte, byte, short, ushort, int, uint, ulong, or char
ulongulong sbytebyteshortushortintuintlong、または charsbyte, byte, short, ushort, int, uint, long, or char
charchar sbytebyte、または shortsbyte, byte, or short
floatfloat sbytebyteshortushortintuintlongulongchar、または decimalsbyte, byte, short, ushort, int, uint, long, ulong, char,or decimal
doubledouble sbytebyteshortushortintuintlongulongcharfloat、または decimalsbyte, byte, short, ushort, int, uint, long, ulong, char, float,or decimal
decimaldecimal sbytebyteshortushortintuintlongulongcharfloat、または doublesbyte, byte, short, ushort, int, uint, long, ulong, char, float, or double

コメントRemarks

  • 明示的な数値変換では、精度が失われたり、例外 (通常、OverflowException) がスローされることがあります。The explicit numeric conversion may cause loss of precision or result in throwing an exception, typically an OverflowException.

  • ある整数型の値を別の整数型に変換するとき、その結果は、オーバーフロー チェック コンテキストによって変わります。When you convert a value of an integral type to another integral type, the result depends on the overflow checking context. checked コンテキストでは、変換元の値が変換先の型の範囲内にあるとき、変換に成功します。In a checked context, the conversion succeeds if the source value is within the range of the destination type. それ以外の場合は、OverflowException がスローされます。Otherwise, an OverflowException is thrown. unchecked コンテキストでは、変換は常に成功し、次のように続行されます。In an unchecked context, the conversion always succeeds, and proceeds as follows:

    • 変換元の型が変換先の型より大きい場合、変換元の値はその "余分な" 最上位ビットを破棄することで切り詰められます。If the source type is larger than the destination type, then the source value is truncated by discarding its "extra" most significant bits. 結果は変換先の型の値として扱われます。The result is then treated as a value of the destination type.

    • 変換元の型が変換先の型より小さい場合、変換元の値は変換先の型と同じサイズになるように符号かゼロが拡張されます。If the source type is smaller than the destination type, then the source value is either sign-extended or zero-extended so that it is the same size as the destination type. 変換元の型に符号が付いている場合は符号拡張が利用され、符号が付いていない場合はゼロ拡張が利用されます。Sign-extension is used if the source type is signed; zero-extension is used if the source type is unsigned. 結果は変換先の型の値として扱われます。The result is then treated as a value of the destination type.

    • 変換元の型が変換先の型と同じサイズの場合、変換元の値は変換先の型の値として扱われます。If the source type is the same size as the destination type, then the source value is treated as a value of the destination type.

  • decimal 値を整数型に変換するとき、この値は 0 方向に最も近い整数値に丸められます。When you convert a decimal value to an integral type, this value is rounded towards zero to the nearest integral value. 結果的に生成される整数値が変換先の型の範囲外になった場合、OverflowException がスローされます。If the resulting integral value is outside the range of the destination type, an OverflowException is thrown.

  • double または float 値を整数型に変換するとき、この値は 0 方向に最も近い整数値に丸められます。When you convert a double or float value to an integral type, this value is rounded towards zero to the nearest integral value. 結果的に生成される整数値が変換先の型の範囲外になる場合、結果はオーバーフロー チェック コンテキストによって変わります。If the resulting integral value is outside the range of the destination type, the result depends on the overflow checking context. チェック済みコンテキストの場合、OverflowException がスローされます。未チェック コンテキストの場合、結果は変換先の型の不特定な値になります。In a checked context, an OverflowException is thrown, while in an unchecked context, the result is an unspecified value of the destination type.

  • doublefloat に変換すると、double 値は最も近い float 値に丸められます。When you convert double to float, the double value is rounded to the nearest float value. double 値が小さすぎるか、大きすぎて変換先の型に合わない場合、結果は 0 か無限になります。If the double value is too small or too large to fit into the destination type, the result will be zero or infinity.

  • float または doubledecimal に変換するとき、変換元の値は decimal 表現に変換され、必要であれば、28 番目の小数位の後に最も近い数字に丸められます。When you convert float or double to decimal, the source value is converted to decimal representation and rounded to the nearest number after the 28th decimal place if required. 変換元の値によっては、結果は次のいずれかになります。Depending on the value of the source value, one of the following results may occur:

    • 変換元の値が小さすぎて decimal として表現できない場合、結果は 0 になります。If the source value is too small to be represented as a decimal, the result becomes zero.

    • 変換元の値が NaN (Not a Number/数字ではない) か、無限か、大きすぎて decimal として表現できない場合、OverflowException がスローされます。If the source value is NaN (not a number), infinity, or too large to be represented as a decimal, an OverflowException is thrown.

  • decimalfloat または double に変換すると、decimal 値は最も近い double または float 値に丸められます。When you convert decimal to float or double, the decimal value is rounded to the nearest double or float value.

明示的な変換に関する詳細については、C# 言語仕様に関するページの「Explicit conversions」(明示的な変換) セクションをご覧ください。For more information about explicit conversions, see the Explicit conversions section of the C# language specification.

関連項目See also