昨天一小师弟问了我一程序输出问题,我也弄不明白,想问问大家
程序很简单,代码如下:
class CCircle
{
   private double pi=3.14;
   private double radius;
   
   public CCircle(double r)
   {
      radius=r;
   }
   
   public void show()
   {
      System.out.println("area="+pi*radius*radius);
   }
}public class app8_7
{
   public static void main(String args[])
   {
      CCircle cir1=new CCircle(1.0);
      cir1.show();
      
      CCircle cir2=new CCircle(3.0);
      cir2.show();
   }
}IDE用的是Jcreator,输出如下:
area=3.14
area=28.259999999999998
Press any key to continue...
现在的问题是:为什么输入radius=3.0的时候结果中有效数字这么长,而其他输入结果都是两位有效数字?

解决方案 »

  1.   

    http://www-128.ibm.com/developerworks/cn/java/j-jtp0114/
    这里说的很清楚,计算机处理浮点数的时候有时会出现这种问题
      

  2.   

    浮点运算很少是精确的。虽然一些数字(譬如 0.5 )可以精确地表示为二进制(底数 2)小数(因为 0.5 等于 2 -1),但其它一些数字(譬如 0.1 )就不能精确的表示。因此,浮点运算可能导致舍入误差,产生的结果接近 ― 但不等于 ― 您可能希望的结果。例如,下面这个简单的计算将得到 2.600000000000001 ,而不是 2.6 : 
     double s=0;
      for (int i=0; i<26; i++)
        s += 0.1;
      System.out.println(s);