C#Intermedio6 oct 2025
El caso del decimal que se multiplicó solo
snippet.c#
using System;
class Program
{
static void Main()
{
decimal d = 1.0m;
d *= 0.1m;
Console.WriteLine(d == 0.1m);
Console.WriteLine(d);
}
}¿Qué crees que imprime?
✅ Salida Esperada
True
0.1⚠️ Salida Real
False
0.1¿Por qué pasa esto?
**¡C# tiene una doble personalidad con los decimales!** 🤔
- El cálculo `d *= 0.1m` produce **exactamente** 0.1, pero...
- La comparación `==` falla porque **decimales son precisos pero traviesos**
- Resultado: **¡El valor es idéntico pero la comparación miente!** 🎭
¿Por qué? **Precisión decimal**: C# almacena decimales con 96 bits, y aunque visualmente son iguales, internamente pueden tener representaciones ligeramente diferentes debido a operaciones intermedias. Usa `Math.Round()` o comparaciones con tolerancia para domar estos rebeldes numéricos.
Conceptos relacionados
decimal-precisionfloating-pointcomparison