Таблица явных числовых преобразований (Справочник по 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.

Исходный типFrom КомуTo
sbytesbyte byte, ushort, uint, ulong или charbyte, ushort, uint, ulong, or char
bytebyte sbyte или charsbyte or char
shortshort sbyte, byte, ushort, uint, ulong или charsbyte, byte, ushort, uint, ulong, or char
ushortushort sbyte, byte, short или charsbyte, byte, short, or char
intint sbyte, byte, short, ushort, uint, ulong или charsbyte, byte, short, ushort, uint, ulong,or char
uintuint sbyte, byte, short, ushort, int или charsbyte, byte, short, ushort, int, or char
longlong sbyte, byte, short, ushort, int, uint, ulong или charsbyte, byte, short, ushort, int, uint, ulong, or char
ulongulong sbyte, byte, short, ushort, int, uint, long или charsbyte, byte, short, ushort, int, uint, long, or char
charchar sbyte, byteили shortsbyte, byte, or short
floatfloat sbyte, byte, short, ushort, int, uint, long, ulong, char или decimalsbyte, byte, short, ushort, int, uint, long, ulong, char,or decimal
doubledouble sbyte, byte, short, ushort, int, uint, long, ulong, char, float или decimalsbyte, byte, short, ushort, int, uint, long, ulong, char, float,or decimal
decimaldecimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float или 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. В проверенном контексте преобразование выполняется успешно, если исходное значение находится в диапазоне конечного типа.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. В непроверяемом контексте преобразование всегда завершается успешно и выполняется следующим образом.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 в целочисленный тип оно округляется в сторону нуля до ближайшего целого значения.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 в целочисленный тип оно округляется в сторону нуля до ближайшего целого значения.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.

  • При преобразовании из double в float значение double округляется до ближайшего значения float.When you convert double to float, the double value is rounded to the nearest float value. Если значение double слишком мало или слишком велико для целевого типа, результатом будет ноль или бесконечность соответственно.If the double value is too small or too large to fit into the destination type, the result will be zero or infinity.

  • При преобразовании из float или double в decimal исходное значение преобразуется в представление 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, результатом будет ноль.If the source value is too small to be represented as a decimal, the result becomes zero.

    • Если исходное значение не является числом (NaN), равно бесконечности или слишком велико для представления в виде 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.

  • При преобразовании из decimal в float или 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#.For more information about explicit conversions, see the Explicit conversions section of the C# language specification.

См. такжеSee also