it is a bad idea to use "==" with floating numbers, tryif(Math.Abs(a/b - 0.66f) < 0.0001)
{}
else
{}

解决方案 »

  1.   

    你把代码改为:
    float a=float.Parse((0.2178).ToString());
    float b=float.Parse((0.33).ToString());
    Console.WriteLine(a/b);
    if(float.Parse(Convert.ToString(a/b))==float.Parse((0.66).ToString()))
    Console.WriteLine("1");
    else
    Console.WriteLine("0");
    这一个程序才正确,具体原因我现在也没有弄明白。
      

  2.   

    这是机器运算精度误差造成的
    一般可设一个容差闵值eps,让他们之差的绝对值在eps内就认为他们相等。
      

  3.   

    呵呵,这是浮点数的存贮有误差引起的
       “Console.WriteLine(a/b);”这一句之所以输出0.66是因为计算结果在ToString()的时候被近似作了0.66(恰巧在这里无误差)
        (a/b==0.66f)之所以为false也是因为存储误差(其实还有计算误差和舍入时的精度误差,比如计算机认为1.0/3.0=0.3333333)引起的
        所以,强烈建议不要“比较两个浮点数相等”——这是非常不可靠的!!
       
       有例如 if(0.618f/1.414f*0.707f==0.500f)Console.WriteLine("equal");
              else Console.WriteLine("not equal");
       就输出 "not equal"
     
       还有if(9E-400==0)Console.WriteLine("wrong");输出“wrong”
      

  4.   

    崇拜saucer(思归, MS .NET MVP)