C#浮动到双倍

时间:2011-09-20 08:06:44

标签: c# floating-point double

static void Main(string[] args)
{
           double y = 23.12F;
           Console.WriteLine(y);
           Console.Read();
}

为什么y的值显示23.1200008392334而不是23.12

static void Main(string[] args)
    {
        int i = -9; uint j = (uint)i;
        Console.WriteLine(j);
        Console.Read();
    }

j如何显示值4294967287

2 个答案:

答案 0 :(得分:7)

浮点只有保证才能精确到整数值;除此之外,他们不能代表所有数字; 23.1200008392334是最接近23.12的,因为IEEE754 的工作方式

如果您想要“典型”处理小数值...请改用decimal

decimal y = 23.12M;

使用uint - 因为uint没有负值。相反,您正在从uint的最大值向后追踪。如果您不想这样做,请使用checked

uint j = checked((uint) i);

checked
{
    uint j = (uint)i;
}
然后它会在一阵火花中爆炸而不是爆炸。有时是好事;有时候很糟糕unchecked是默认值。

答案 1 :(得分:1)