【问题标题】:C# Float to DoubleC# 浮点数加倍
【发布时间】:2011-09-20 08:06:43
【问题描述】:
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

【问题讨论】:

  • 你的第二个例子看起来很奇怪。您正在将负数转换为不支持负数的类型
  • -9 的two's complement 是:1111 1111 1111 1111 1111 1111 1111 0111。把这个数字带入一个可以将二进制转换为十进制的计算器,你得到 4294967287 ;p

标签: c# floating-point double


【解决方案1】:

浮点数仅保证对于整数值是精确的;除此之外,它们不能代表所有数字;由于 IEEE754 的工作原理,23.1200008392334 是最接近 23.12 的版本。

如果您想要“典型”处理十进制值...请改用decimal

decimal y = 23.12M;

使用uint - 因为uint 没有负值。相反,您从uint 的最大值向后跟踪。如果您不想要这个,请使用checked

uint j = checked((uint) i);

checked
{
    uint j = (uint)i;
}

然后它会在一阵火花中爆炸。有时是好事;有时不好。 unchecked 是默认值。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 1970-01-01
      • 2010-09-24
      • 2013-05-20
      • 1970-01-01
      • 2012-09-07
      • 2021-02-17
      • 1970-01-01
      相关资源
      最近更新 更多