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