这是cpu的精度问题,这不光是java特有的别的语言也有这个问题

解决方案 »

  1.   

    1==(3*(1.0/3.0))你的比较运算有问题,在这里,java把3*(1.0/3.0)自动转换成int型,结果进位成了1。第二个也一样。
      

  2.   

    你试试这个:
    class My1
    {
      public static void main(String[] args)
      {
      if(1.0==(3*(1.0/3.0))) 
      {
      System.out.println("1.0==0.999999");
      }
      else System.out.println("1.0!=0.999999");
      }
    }class My
    {
      public static void main(String[] args)
      {
      int d=0;
      while(d!=5)
        {
          d=d+(1.0/3.0);
          System.out.println(""+d);
        }
      }
    }
      

  3.   

    同意 bumaple(蓝枫) 的说法,看来你还是初学
      

  4.   

    还有,你仔细看书,float和double是不可以这样比较相等不相等的。具体的是关于float和double的存储形式的问题了。
      

  5.   

    程序语言的设计中:无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
      

  6.   

    要比较这些数请使用
    java.math.BigDecimal
      

  7.   

    在数字后加上d表示是double类型,然后比较
      

  8.   

    这是cpu的精度问题
    请使用1-x<0.0000000000001这样的方法去判断两个浮点数是否相同
      

  9.   

    cpu的精度
    去看看这方面的介绍