Conversiones numéricas integradas (referencia de C#)
Artikulua
C# proporciona un conjunto de tipos numéricos enteros y de punto flotante. Existe una conversión entre dos tipos numéricos, ya sea implícita o explícita. Debe usar una expresión Cast para realizar una conversión explícita.
Conversiones numéricas implícitas
En la tabla siguiente se muestran las conversiones implícitas predefinidas entre los tipos numéricos integrados:
Las conversiones implícitas de int, uint, long, ulong, nint o nuint a float y de long, ulong, nint o nuint a doublepueden provocar una pérdida de precisión, pero nunca una pérdida de un orden de magnitud. El resto de conversiones numéricas implícitas nunca pierden información.
No hay ninguna conversión implícita a los tipos byte y sbyte. No hay ninguna conversión implícita de los tipos double y decimal.
No hay ninguna conversión implícita entre el tipo decimal y el tipo float o double.
Un valor de una expresión constante de tipo int (por ejemplo, un valor representado por un literal entero) se puede convertir implícitamente en sbyte, byte, short, ushort, uint, ulong, nint o nuint, siempre que esté dentro del rango del tipo de destino:
C#
byte a = 13;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Como se muestra en el ejemplo anterior, si el valor constante no está dentro del rango del tipo de destino, se produce el error del compilador CS0031.
Conversiones numéricas explícitas
La siguiente tabla muestra las conversiones explícitas predefinidas entre tipos numéricos integrados para los que no hay ninguna conversión implícita:
sbyte, byte, short, ushort, int, uint, long o nint
Oharra
Una conversión numérica explícita podría provocar la pérdida de datos o producir una excepción, normalmente una de tipo OverflowException.
Tenga en cuenta también lo siguiente:
Al convertir un valor de tipo entero en otro tipo entero, el resultado depende del contexto de comprobación de desbordamiento. En un contexto comprobado, la conversión se realiza correctamente si el valor de origen está dentro del intervalo del tipo de destino. De lo contrario, se produce una excepción OverflowException. En un contexto no comprobado, la conversión siempre se realiza correctamente y continúa así:
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. El resultado se trata como un valor del tipo de destino.
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. 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. El resultado se trata como un valor del tipo de destino.
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.
Cuando convierte un valor decimal en un tipo entero, este valor se redondea hacia cero al valor entero más cercano. Si el valor entero resultante está fuera del rango del tipo de destino, se genera una excepción OverflowException.
Al convertir un valor double o float en un tipo entero, este valor se redondea hacia cero al valor entero más cercano. Si el valor entero resultante está fuera del intervalo del tipo de destino, el resultado depende del contexto de comprobación de desbordamiento. 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.
Cuando convierte double en float, el valor double se redondea al valor float más cercano. Si el valor double es demasiado pequeño o demasiado grande para adaptarse al tipo float, el resultado será cero o infinito.
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. Dependiendo del valor que tenga el valor de origen, puede producirse uno de los siguientes resultados:
Si el valor de origen es demasiado pequeño para representarse como decimal, el resultado se convierte en cero.
Si el valor de origen es NaN (no es un número), infinito o demasiado grande para representarse como un decimal, se genera OverflowException.
Cuando se convierte decimal en float o double, el valor de origen se redondea al valor float o double más cercano, respectivamente.
Eduki honen iturburua GitHub-en aurki daiteke, bertan arazoak eta aldaketak egiteko eskaerak sortu eta berrikus ditzakezu. Informazio gehiagorako, ikusi gure kolaboratzaileen gida.
.NET oharrak
.NET iturburu irekiko proiektu bat da. Hautatu esteka bat oharrak bidaltzeko:
Bat egin IAren soluzio eskalagarrien soluzioak sortzeko topaketa sortarekin, mundu errealaren erabilera-kasuetan oinarrituak, beste garatzaile eta aditu batzuekin.