各位大侠,我的程序是这样的:
class IntDoubleTest
{
  public static void main(String[] args)
  {
    double d = 123.67;
    int i0 = 1;
    System.out.println(i + " + " + d + " = " + (i + d));
  }
}
但是为什么结果是:10 + 123.67 = 133.67000000000002
这么后面多出了这么多位?我想应该就是133.67啊,但是我把i修改成1后,结果却是:1 + 123.67 = 124.67,这是怎么回事啊?

解决方案 »

  1.   

    和你计算机的对int 和duoble的位数有关吧。int   i0   =   1; (怎么这么不细心!)
      

  2.   

     System.out.println(i   +   "   +   "   +   d   +   "   =   "   +   (i   +   d)); 
    里面的i好像没有定义,是不是应该是i0?
      

  3.   


            首先说明一点JAVA的数据类型是与计算机无关的         double不是一个精确值,它只保证在精度范围内是准确的,double的有效数字为15位,
     
         所以出现133.67000000000002是完全正常的,至于加1后是124.67估计结果为:124.67000000000000,0被省掉了
      

  4.   

    是这样的:在JAVA中,运算要类型匹配,所以一个整数和一个双精度做运算的时候,整数需要首先转换为double,所以其实就是2个double的运算,double的计算是不精确的,所以会出现上面的效果。