Manipular números enteros y de punto flotante
En este tutorial se explican los tipos numéricos en C# de manera interactiva, mediante el explorador. Escribirá en C# y verá el resultado de compilar y ejecutar el código. Contiene una serie de lecciones que ofrecen información detallada sobre los números y las operaciones matemáticas en C#. En ellas se enseñan los aspectos básicos del lenguaje C#.
Sugerencia
Para pegar un fragmento de código dentro del modo de enfoque debe usar el método abreviado de teclado (Ctrl + v o cmd + v).
Análisis de las operaciones matemáticas con enteros
Ejecute el código siguiente en la ventana interactiva. Seleccione el botón Entrar en el modo de enfoque. A continuación, escriba el bloque de código siguiente en la ventana interactiva y seleccione Ejecutar:
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
Si está trabajando en su entorno, en su lugar debe seguir las instrucciones de la versión local.
Ha visto una de las operaciones matemáticas fundamentales con enteros. El tipo int
representa un entero, que puede ser un número entero positivo o negativo. Use el símbolo +
para la suma. Otros operadores matemáticos comunes con enteros son:
-
para resta*
para multiplicación/
para división
Sugerencia
En este tutorial interactivo, puede indagar por su cuenta con la modificación del código que ha escrito en la ventana interactiva. Este tutorial proporciona ejemplos que puede probar en cada paso.
Comience por explorar esas operaciones diferentes. Modifique la tercera línea para probar cada una de estas operaciones. Después de cada modificación, seleccione el botón Ejecutar.
Resta:
int c = a - b;
Multiplicación:
int c = a * b;
División:
int c = a / b;
Si quiere, también puede probar a escribir varias operaciones matemáticas en la misma línea.
Sugerencia
Cuando explore C# o cualquier otro lenguaje de programación, cometerá errores al escribir código. El compilador buscará dichos errores y los notificará. Si la salida contiene mensajes de error, revise detenidamente el ejemplo de código y el código de la ventana interactiva para saber qué debe corregir. Este ejercicio le ayudará a aprender la estructura del código de C#.
Análisis sobre el orden de las operaciones
El lenguaje C# define la prioridad de las diferentes operaciones matemáticas con reglas compatibles con las reglas aprendidas en las operaciones matemáticas. La multiplicación y división tienen prioridad sobre la suma y resta. Indague sobre ello con la ejecución del código siguiente en la ventana interactiva:
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
La salida muestra que la multiplicación se realiza antes que la suma.
Puede forzar la ejecución de un orden diferente de las operaciones si la operación o las operaciones que realizó primero se incluyen entre paréntesis:
int a = 5;
int b = 4;
int c = 2;
int d = (a + b) * c;
Console.WriteLine(d);
Combine muchas operaciones distintas para indagar más. Reemplace la cuarta línea anterior con algo parecido a esto:
int d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Puede que haya observado un comportamiento interesante de los enteros. La división de enteros siempre genera un entero como resultado, incluso cuando se espera que el resultado incluya un decimal o una parte de una fracción.
Si no ha observado este comportamiento, pruebe este código:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);
Vuelva a seleccionar Ejecutar para ver los resultados.
Información sobre los límites y la precisión de los enteros
En el último ejemplo se ha mostrado que la división de enteros trunca el resultado.
Puede obtener el resto con el operador de resto, el carácter %
:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");
El tipo de entero de C# difiere de los enteros matemáticos en un aspecto: el tipo int
tiene límites mínimo y máximo. Ejecute este código en la ventana interactiva para ver esos límites:
int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");
Si un cálculo genera un valor que supera los límites, se producirá una condición de subdesbordamiento o desbordamiento. La respuesta parece ajustarse de un límite al otro. Agregue estas dos líneas en la ventana interactiva para ver un ejemplo:
int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");
Tenga en cuenta que la respuesta está muy próxima al entero mínimo (negativo). Es lo mismo que min + 2
.
La operación de suma desbordó los valores permitidos para los enteros.
La respuesta es un número negativo muy grande porque un desbordamiento "se ajusta" desde el valor de entero más alto posible al más bajo.
Hay otros tipos numéricos con distintos límites y precisiones que podría usar si el tipo int
no satisface sus necesidades. Ahora vamos a explorar estos tipos de números.
Operaciones con el tipo double
El tipo numérico double
representa números de punto flotante de doble precisión. Puede que no esté familiarizado con estos términos. Un número de punto flotante resulta útil para representar números no enteros cuya magnitud puede ser muy grande o pequeña. La precisión doble es un término relativo que describe el número de dígitos binarios que se usan para almacenar el valor. Los números de precisión doble tienen el doble del número de dígitos binarios que la precisión sencilla. En los equipos modernos, es más habitual utilizar números con doble precisión que con precisión sencilla. Los números de precisión sencilla se declaran mediante la palabra clave float
.
Comencemos a explorar. Pruebe el código siguiente en la ventana interactiva y observe el resultado:
double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);
Tenga en cuenta que la respuesta incluye la parte decimal del cociente. Pruebe una expresión algo más complicada con tipos double:
double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);
El intervalo de un valor double es mucho más amplio que en el caso de los valores enteros. Pruebe el código siguiente en la ventana interactiva:
double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");
Estos valores se imprimen en notación científica. El número a la izquierda de E
es la mantisa. El número a la derecha es el exponente, como una potencia de diez.
Al igual que sucede con los números decimales en las operaciones matemáticas, los tipos double en C# pueden presentar errores de redondeo. Pruebe este código:
double third = 1.0 / 3.0;
Console.WriteLine(third);
Sabe que 0.3
es 3/10
, y no exactamente igual que 1/3
. Del mismo modo, 0.33
es 33/100
. Esto está más cerca de 1/3
, pero aún no es exacto.
Desafío
Pruebe otros cálculos con números grandes, números pequeños, multiplicaciones y divisiones con el tipo double
. Intente realizar cálculos más complicados.
Trabajo con tipos decimales
Hasta el momento ha visto los tipos numéricos básicos en C#: los tipos integer y double. Pero hay otro tipo más que debe conocer: decimal
. El tipo decimal
tiene un intervalo más pequeño, pero mayor precisión que double
. Observemos lo siguiente:
decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");
Tenga en cuenta que el intervalo es más pequeño que con el tipo double
. Puede observar una precisión mayor con el tipo decimal si prueba el siguiente código:
double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);
decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);
Observe que la expresión matemática con el tipo decimal tiene más dígitos a la derecha del punto decimal.
El sufijo M
en los números es la forma de indicar que una constante debe usar el tipo decimal
. De no ser así, el compilador asume el tipo de double
.
Nota:
La letra M
se eligió como la letra más distintiva visualmente entre las palabras clave double
y decimal
.
Desafío
Ahora que ya conoce los diferentes tipos numéricos, escriba código para calcular el área de un círculo cuyo radio sea de 2,50 centímetros. Recuerde que el área de un circulo es igual al valor de su radio elevado al cuadrado multiplicado por Pi. Sugerencia: .NET contiene una constante de Pi, Math.PI, que puede usar para ese valor. Math.PI, al igual que todas las constantes declaradas en el espacio de nombres System.Math
, es un valor double
. Por ese motivo, debe usar double
en lugar de valores decimal
para este desafío.
Debe obtener una respuesta entre 19 y 20.
Desafío completo
¿Ha obtenido algo parecido a lo siguiente?
double radius = 2.50;
double area = Math.PI * radius * radius;
Console.WriteLine(area);
Si lo desea, pruebe con otras fórmulas.
¡Enhorabuena!
Ha completado el tutorial interactivo "Números en C#". Puede seleccionar el vínculo Ramas y bucles debajo para iniciar el tutorial interactivo siguiente, o bien puede visitar el sitio de .NET para descargar el SDK de .NET, crear un proyecto en la máquina y continuar la codificación. La sección "Pasos siguientes" le lleva de vuelta a estos tutoriales.
En estos temas encontrará más información sobre los números en C#:
¿Tiene algún problema con esta sección? Si es así, envíenos sus comentarios para que podamos mejorarla.