下面是一个简单的循环,基数为1.0,每次增量0.1,但我在调试时发现每次增加0.1时,它并不等于1.1,1.2,1.3(可能是1.1000000007),C#的double精度的确有这个问题,但我想保持准确的精度,循环变量保持在1.0,1.1,1.2,1.3,1.4。
但我不知道该如何控制。
在这里的问题就是1.0 + 0.1 != 1.1是成立的。
for (double cur = 1.0; cur <= 1.4; cur += 0.1)
{
// Do Something
}

解决方案 »

  1.   

    http://hi.baidu.com/jiang_yy_jiang/blog/item/a5eb73384cbc2ccfd46225a4.html
      

  2.   

    double i = 1.0;
    double j = i + 0.1;
    double k = j + 0.1;
    -----------------------
    j可能不等于1.1,k可能不等于1.2
      

  3.   

    谢谢,我试过了,还是会出现一样的问题。
    --------------------------------------------
                double i = 1.0d;
                double j = i + 0.1d;
                double k = j + 0.1d;k已经不等于1.2了。
      

  4.   


                for (decimal d = 1.0m; d <= 1.4m; d += 0.1m)
                {
                    Console.WriteLine(d);
                }
      

  5.   

    恩,我已经照这种方式做了。看来实际中运用double, float还是比较危险的。