Tabla de conversiones numéricas explícitas (Referencia de C#)Explicit numeric conversions table (C# Reference)

La siguiente tabla muestra las conversiones explícitas predefinidas entre tipos numéricos de .NET para los que no hay ninguna conversión implícita.The following table shows the predefined explicit conversions between .NET numeric types for which there is no implicit conversion.

DeFrom EnTo
sbytesbyte byte, ushort, uint, ulong o charbyte, ushort, uint, ulong, or char
bytebyte sbyte o charsbyte or char
shortshort sbyte, byte, ushort, uint, ulong o charsbyte, byte, ushort, uint, ulong, or char
ushortushort sbyte, byte, short o charsbyte, byte, short, or char
intint sbyte, byte, short, ushort, uint, ulong o charsbyte, byte, short, ushort, uint, ulong,or char
uintuint sbyte, byte, short, ushort, int o charsbyte, byte, short, ushort, int, or char
longlong sbyte, byte, short, ushort, int, uint, ulong o charsbyte, byte, short, ushort, int, uint, ulong, or char
ulongulong sbyte, byte, short, ushort, int, uint, long o charsbyte, byte, short, ushort, int, uint, long, or char
charchar sbyte, byteo shortsbyte, byte, or short
floatfloat sbyte, byte, short, ushort, int, uint, long, ulong, char o decimalsbyte, byte, short, ushort, int, uint, long, ulong, char,or decimal
doubledouble sbyte, byte, short, ushort, int, uint, long, ulong, char, float o decimalsbyte, byte, short, ushort, int, uint, long, ulong, char, float,or decimal
decimaldecimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float o doublesbyte, byte, short, ushort, int, uint, long, ulong, char, float, or double

ComentariosRemarks

  • La conversión numérica explícita puede provocar una pérdida de precisión o dar lugar a que se produzca una excepción, normalmente OverflowException.The explicit numeric conversion may cause loss of precision or result in throwing an exception, typically an OverflowException.

  • Al convertir un valor de tipo entero en otro tipo entero, el resultado depende del contexto de comprobación de desbordamiento.When you convert a value of an integral type to another integral type, the result depends on the overflow checking context. En un contexto comprobado, la conversión se realiza correctamente si el valor de origen está dentro del intervalo del tipo de destino.In a checked context, the conversion succeeds if the source value is within the range of the destination type. De lo contrario, se produce una excepción OverflowException.Otherwise, an OverflowException is thrown. En un contexto no comprobado, la conversión siempre se realiza correctamente y continúa así:In an unchecked context, the conversion always succeeds, and proceeds as follows:

    • Si el tipo de origen es mayor que el tipo de destino, el valor de origen se trunca al descartar sus bits "extra" más significativos.If the source type is larger than the destination type, then the source value is truncated by discarding its "extra" most significant bits. El resultado se trata como un valor del tipo de destino.The result is then treated as a value of the destination type.

    • Si el tipo de origen es menor que el tipo de destino, el valor de origen se amplía mediante signos o ceros para que tenga el mismo tamaño que el tipo de destino.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. La ampliación mediante signos se usa si el tipo de origen tiene signo; se emplea ampliación mediante ceros si el tipo de origen no tiene signo.Sign-extension is used if the source type is signed; zero-extension is used if the source type is unsigned. El resultado se trata como un valor del tipo de destino.The result is then treated as a value of the destination type.

    • Si el tipo de origen es del mismo tamaño que el tipo de destino, el valor de origen se trata como un valor del tipo de destino.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.

  • Cuando convierte un valor decimal en un tipo entero, este valor se redondea hacia cero al valor entero más cercano.When you convert a decimal value to an integral type, this value is rounded towards zero to the nearest integral value. Si el valor entero resultante está fuera del rango del tipo de destino, se genera una excepción OverflowException.If the resulting integral value is outside the range of the destination type, an OverflowException is thrown.

  • Al convertir un valor double o float en un tipo entero, este valor se redondea hacia cero al valor entero más cercano.When you convert a double or float value to an integral type, this value is rounded towards zero to the nearest integral value. Si el valor entero resultante está fuera del intervalo del tipo de destino, el resultado depende del contexto de comprobación de desbordamiento.If the resulting integral value is outside the range of the destination type, the result depends on the overflow checking context. En un contexto comprobado, se genera una excepción OverflowException, mientras que en un contexto no comprobado, el resultado es un valor no especificado del tipo de destino.In a checked context, an OverflowException is thrown, while in an unchecked context, the result is an unspecified value of the destination type.

  • Cuando convierte double en float, el valor double se redondea al valor float más cercano.When you convert double to float, the double value is rounded to the nearest float value. Si el valor double es demasiado pequeño o demasiado grande para adaptarse al tipo de destino, el resultado será cero o infinito.If the double value is too small or too large to fit into the destination type, the result will be zero or infinity.

  • Cuando convierte float o double en decimal, el valor de origen se convierte en la representación decimal y se redondea al número más cercano después de la posición decimal 28 si es necesario.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. Dependiendo del valor que tenga el valor de origen, puede producirse uno de los siguientes resultados:Depending on the value of the source value, one of the following results may occur:

    • Si el valor de origen es demasiado pequeño para representarse como decimal, el resultado se convierte en cero.If the source value is too small to be represented as a decimal, the result becomes zero.

    • Si el valor de origen es NaN (no es un número), infinito o demasiado grande para representarse como un decimal, se genera OverflowException.If the source value is NaN (not a number), infinity, or too large to be represented as a decimal, an OverflowException is thrown.

  • Cuando convierte decimal en float o double, el valor decimal se redondea al valor double o float más cercano.When you convert decimal to float or double, the decimal value is rounded to the nearest double or float value.

Para obtener más información sobre las conversiones explícitas, vea la sección Conversiones explícitas de la Especificación del lenguaje C#.For more information about explicit conversions, see the Explicit conversions section of the C# language specification.

Vea tambiénSee also