csharp-tipos-decimales-float-double-decimal

Tipos con decimales en C# (Float, Double y Decimal)

  • 7 min

Los numeros decimales nos permiten representar números reales, es decir, aquellos que pueden tener una parte fraccionaria y ser positivos o negativos.

En C#, los tipos principales para almacenar números decimales son float, double y decimal.

Cada uno tiene un rango y precisión específicos, los cuales deben tenerse en cuenta dependiendo del tipo de cálculos que se vayan a realizar.

Tipo C#Tipo .NETBitsPrecisiónSufijo¿Para qué usarlo?
floatSingle32~7 dígitosfGráficos 3D, Unity, ML, Arrays gigantes.
doubleDouble64~15 dígitosdCiencia, Ingeniería, uso general.
decimalDecimal128~28 dígitosmDinero, Finanzas, Contabilidad.
  1. ¿Estás calculando dinero, nóminas, precios o cualquier cosa donde perder un céntimo sea ilegal o un problema? Usa decimal.
  2. ¿Estás haciendo un videojuego, procesando audio o trabajando con redes neuronales? Usa float.
  3. ¿Ninguna de las anteriores (uso general, matemáticas)? Usa double (es el estándar por defecto en C#).

Punto flotante: float y double

Los tipos float y double son tipos de Punto Flotante Binario. Están diseñados siguiendo el estándar IEEE 754, que es la norma que siguen casi todos los procesadores modernos para hacer matemáticas rápidas.

Internamente, no guardan el número exacto. Guardan una aproximación científica basada en tres partes:

  1. Signo: Positivo o negativo.
  2. Mantisa: Los dígitos significativos del número.
  3. Exponente: Dónde colocamos la coma decimal (de ahí lo de “punto flotante”, la coma se mueve).

Esto permite representar números astronómicamente grandes o microscópicamente pequeños, pero con un coste: pérdida de precisión.

float (precisión simple)

  • Tamaño: 32 bits (4 bytes).
  • Precisión: ~6-9 dígitos.
  • Sufijo: f o F.
  • Uso: Gráficos 3D (Unity usa float para todo), motores físicos, procesamiento de señales donde la velocidad es crítica y un pequeño error es aceptable.
float gravedad = 9.81f; // Nota la 'f' al final
Copied!

double (doble precisión)

  • Tamaño: 64 bits (8 bytes).
  • Precisión: ~15-17 dígitos.
  • Sufijo: d o D (opcional, es el default).
  • Uso: Cálculos científicos, matemáticas generales.
double distanciaSol = 149_600_000.5; // Por defecto es double
Copied!

En C#, cualquier número con decimales que escribas en el código (literal), como 3.14, es interpretado automáticamente como double. Si quieres que sea float, **tienes que poner la f**.

La solución de alta precisión decimal

Si float y double son rápidos pero “imprecisos”, decimal es todo lo contrario.

El tipo decimal es un tipo de Punto Flotante de 128 bits diseñado específicamente para cálculos financieros y monetarios. A diferencia de sus hermanos, decimal utiliza base 10 en lugar de base 2 para su parte fraccionaria.

Esto significa que números como se representan de forma exacta.

  • Tamaño: 128 bits (16 bytes).
  • Precisión: 28-29 dígitos significativos.
  • Sufijo: m o M (de “Money”).
  • Rango: Más pequeño que double, pero mucho más preciso.
  • Rendimiento: Mucho más lento (calculado por software, no por hardware).
decimal precio = 19.99m; // La 'm' es OBLIGATORIA
decimal impuesto = 0.21m;
decimal total = precio * (1 + impuesto); // Cálculo exacto, sin errores de redondeo extraño

Copied!

Si intentas asignar un literal double a un decimal sin el sufijo m, el compilador te dará un error. C# te protege para que no pierdas precisión sin querer.

Operaciones matemáticas comunes

Las operaciones aritméticas son similares a las de los enteros. Podemos realizar suma, resta, multiplicación y división con números de punto flotante.

double x = 10.5;
double y = 3.2;

double suma = x + y;
double resta = x - y;
double multiplicacion = x * y;
double division = x / y;

Console.WriteLine($"Suma: {suma}");
Console.WriteLine($"Resta: {resta}");
Console.WriteLine($"Multiplicación: {multiplicacion}");
Console.WriteLine($"División: {division}");
Copied!

Ejemplos prácticos