有下面程序:
class T{
public static void main(String args[]){
for(float y=0;y!=1.2;y+=0.1){
System.out.println(y);
if(y>1.5) break;
}
}
}
该程序的输出结果如下:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
1.0000001
1.1000001
1.2000002
1.3000002
1.4000002
1.5000002
修改后的程序如下:
class T{
public static void main(String args[]){
for(double y=0;y!=1.2;y+=0.1){
System.out.println(y);
if(y>1.5) break;
}
}
}
修改后程序的输出结果:
0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
请问:为什么这两个程序循环语句中不能按0.1递增?望高手们赐教。

解决方案 »

  1.   

    float和double型跟int型机器内部存放方式不同.只能是近似值.
      

  2.   

    ding yi xia 
    float和double型跟int型机器内部存放方式不同
    这个应该是编码的问题
    具体也不知道该怎么说
      

  3.   

    public static void main(String args[]) {
            for (int y = 0; y!=12; y += 1) {
                double x = y;
                x = x/10;
                System.out.println(x);
                if (y > 15) break;
            }
        }你看这样解决是不是你要的结果
      

  4.   

    这是某群里一位朋友提供的程序产生如此输出结果的原因:float和double是"不准确"值 参考资料如下:
    float类型的变量与零值比较的if语句的写法: 
    NO
    标准答案示例:const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
    出自林锐的高质量 
      

  5.   

    楼上说的很有道理,double和float在做数据比较时是不精确的,欢迎加入程序讨论群:32998944