Decimal vs Double en C#: ¿qué elegir y cuándo? Guía 2025

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Decimal vs Double en C#: La batalla por la precisión (y tus nervios)



¿Alguna vez has escrito una calculadora de salario o, digamos, un simulador de vuelo de una pelota, y de repente obtuviste 0.30000000000000004 en lugar del esperado 0.3? Si es así, bienvenido al club. La pregunta "decimal vs double! - Which one should I use and when?" es una de las más populares en Stack Overflow, y no es para menos. Parece que es simplemente elegir entre dos tipos de números de punto flotante. Pero en realidad es una elección entre un desastre financiero y la precisión científica (o viceversa).



En este artículo, analizaremos este debate eterno de una vez por todas. Aprenderás en qué se diferencia el tipo decimal en C# del tipo double, dónde aplicar cada uno y, lo más importante, cómo no meter la pata en 2025. ¡Allá vamos!



Brevemente sobre lo principal: ¿qué hay bajo el capó?



Antes de empezar a lanzarnos argumentos, echemos un vistazo a la especificación. Cada tipo tiene su propia arquitectura, y es precisamente esta la que determina dónde será el rey y dónde el paria.



Double (también conocido como System.Double)

  • Tamaño: 64 bits (8 bytes).
  • Precisión: Aproximadamente 15-17 dígitos significativos.
  • Rango: Enorme (desde ±5.0 × 10−324 hasta ±1.7 × 10308).
  • Representación: Punto flotante según el estándar IEEE 754 (binario).
  • Rendimiento: Alto. Los procesadores están optimizados para trabajar con double.


Decimal (también conocido como System.Decimal)

  • Tamaño: 128 bits (16 bytes).
  • Precisión: 28-29 dígitos significativos.
  • Rango: Menor (desde ±1.0 × 10−28 hasta ±7.9 × 1028).
  • Representación: Decimal (básicamente, un número entero con desplazamiento de coma).
  • Rendimiento: Menor. No tiene soporte hardware en la CPU, todos los cálculos son por software.


La principal diferencia que debes recordar: double es una fracción binaria, mientras que decimal es decimal. Precisamente por esto surgen los famosos "errores de redondeo".



¿Por qué double "rompe" el dinero, pero es ideal para la ciencia?



Imagina que intentas escribir el número 0.1 en sistema binario. Será una fracción periódica infinita: 0.0001100110011.... La computadora la recorta, y se obtiene un pequeño pero crítico error. Para cálculos científicos (simulaciones meteorológicas, física, gráficos), este error se acumula, pero dentro de un margen aceptable. Para las finanzas, esto es un "céntimo robado" a un millón de usuarios.



Decimal, en cambio, almacena el número como un entero (por ejemplo, 1/10 = 0.1 se almacena como el número entero 1 y la información de que la coma debe desplazarse un lugar). Por eso, la precisión de decimal es ideal para fracciones decimales.



¿Cuándo usar decimal en C#? (Spoiler: para dinero)



La regla de oro que salvará tu proyecto: usa decimal para cálculos financieros, monetarios y contables. Si en tu variable hay rublos, dólares, intereses de préstamos o IVA, tu elección es clara.



Aquí tienes un ejemplo de por qué double es malo para el bolsillo:



using System;

public class MoneyExample{ public static void Main() { // Mal ejemplo con double double price = 10.99; double tax = 0.07; double totalDouble = price + (price * tax); Console.WriteLine($"Double total: {totalDouble}"); // Puede dar 11.759300000000001

// Buen ejemplo con decimal decimal priceDec = 10.99m; decimal taxDec = 0.07m; decimal totalDec = priceDec + (priceDec * taxDec); Console.WriteLine($"Decimal total: {totalDec}"); // Exacto: 11.7593 }}


¿Ves ese "extra"

Blogs

Book Recommendations