TOC

This article is currently in the process of being translated into Spanish (~98% done).

Tipos de datos.:

Punto flotante (Floating points)

Los números de coma flotante son números que tienen partes fraccionarias (generalmente expresadas con un punto decimal). Quizás se pregunte por qué no hay un solo tipo de datos para tratar con números (fracciones o sin fracciones), sino que es porque es mucho más rápido para la computadora manejar números enteros que con números que contienen fracciones. Por lo tanto, tiene sentido distinguirlos: si sabe que solo tratará con números enteros, elija un tipo de datos entero. De lo contrario, use uno de los tipos de datos de coma flotante, como se describe en este artículo.

Usar un valor de coma flotante es tan fácil como usar un número entero, a pesar de que hay bastantes preocupaciones más con los valores de coma flotante, que discutiremos más adelante. Por ahora, veamos cómo se ve al declarar uno de los tipos de datos de coma flotante más utilizados: el double .

double number;

Al igual que un número entero, por supuesto, puede asignarle un valor al mismo tiempo que lo declara:

double number = 42.0;

Lo mismo ocurre con los tipos flotante y decimal, que se analizarán en solo un segundo, pero aquí, la notación es ligeramente diferente:

double doubleVal = 42.0;
float floatVal = 42.0f;
decimal decimalVal = 42.0m;

Observe la "f" y la "m" después de los números: le indica al compilador que estamos asignando un valor flotante y un valor decimal. Sin él, C # interpretará los números como dobles, que no se pueden convertir automáticamente a flotante o decimal.

¿flotante, doble o decimal?

Tratar con valores de coma flotante en la programación siempre ha causado muchas preguntas e inquietudes. Por ejemplo, C # tiene al menos tres tipos de datos para tratar con números no enteros:

  • float (an alias for System.Single)
  • double (an alias for System.Double)
  • decimal (an alias for System.Decimal)

La diferencia subyacente puede ser un poco difícil de entender, a menos que tenga muchos conocimientos sobre cómo funciona internamente una computadora, así que ciñámonos a las cosas más prácticas aquí.

En general, la diferencia entre los tipos de datos flotantes, dobles y decimales radica en la precisión y, por lo tanto, también en la cantidad de memoria utilizada para mantenerlos. El flotante es el menos costoso: puede representar un número de hasta 7 dígitos. El doble es más preciso, con hasta 16 dígitos, mientras que el decimal es el más preciso, con un máximo de 29 dígitos.

Quizás se pregunte para qué necesita toda esa precisión, pero la respuesta es "matemática". El ejemplo clásico para entender la diferencia es dividir 10 entre 3. La mayoría de nosotros lo haremos en la cabeza y diremos que el resultado es 3.33, pero mucha gente también sabe que no es del todo exacto. La respuesta real es 3.33 seguido de una cantidad de 3 extra: cuántos, al hacer este cálculo con C #, se determina por el tipo de datos. Mira este ejemplo:

float a = 10f / 3;
Console.WriteLine(a);
double b = 10d / 3;
Console.WriteLine(b);
decimal c = 10m / 3;
Console.WriteLine(c);

Hago exactamente el mismo cálculo, pero con diferentes tipos de datos. El resultado se verá así:

a: 3.333333
b: 3.33333333333333
c: 3.3333333333333333333333333333

La diferencia es bastante clara, pero ¿cuánta precisión necesitas realmente para la mayoría de las tareas?

¿Como escoger?

En primer lugar, debe considerar cuántos dígitos necesita almacenar. Un flotante solo puede contener 7 dígitos, por lo que si necesita un número mayor que ese, es posible que desee ir con un doble o decimal en su lugar.

En segundo lugar, tanto el flotante como el doble representarán valores como una aproximación del valor real; en otras palabras, podría no ser comparable hasta el último dígito. Eso también significa que una vez que comience a hacer más y más cálculos con estas variables, es posible que ya no sean tan precisas, lo que básicamente significa que dos valores que deberían verificarse como iguales de repente no serán iguales de todos modos.

Por lo tanto, para situaciones donde la precisión es la principal preocupación, debe ir con el tipo decimal . Un gran ejemplo es para representar números financieros (dinero): no desea agregar 10 cantidades en su contabilidad, solo para descubrir que el resultado no es el que esperaba. Por otro lado, si el rendimiento es más importante, debe ir con un float (para números pequeños) o un double (para números más grandes). Un decimal es, gracias a su precisión adicional, mucho más lento que un flotante: ¡algunas pruebas muestran que es hasta 20 veces más lento!

Resumen.

Al tratar con valores de coma flotante, debe usar un tipo de datos float o double cuando la precisión es menos importante que el rendimiento. Por otro lado, si desea la máxima precisión y está dispuesto a aceptar un nivel más bajo de rendimiento, debe ir con el tipo de datos decimales, especialmente cuando se trata de números financieros.

Si desea obtener más información sobre las diferencias subyacentes entre estos tipos de datos, en un nivel mucho más detallado, debe consultar este artículo muy detallado: What Every Computer Scientist Should Know About Floating-Point Arithmetic

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!