关于循环语句问题

Gary强z 2006-12-02 12:39:26
有下面程序:
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递增?望高手们赐教。
...全文
248 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangchengqin 2006-12-02
  • 打赏
  • 举报
回复
ding yi xia
float和double型跟int型机器内部存放方式不同
这个应该是编码的问题
具体也不知道该怎么说
Gary强z 2006-12-02
  • 打赏
  • 举报
回复
楼上 可以解释得具体点吗?
pengtao_2005 2006-12-02
  • 打赏
  • 举报
回复
float和double型跟int型机器内部存放方式不同.只能是近似值.
aniude 2006-12-02
  • 打赏
  • 举报
回复
java浮点处理精度的问题吧
FarAwayFromHome 2006-12-02
  • 打赏
  • 举报
回复
楼上说的很有道理,double和float在做数据比较时是不精确的,欢迎加入程序讨论群:32998944
Gary强z 2006-12-02
  • 打赏
  • 举报
回复
这是某群里一位朋友提供的

程序产生如此输出结果的原因:float和double是"不准确"值

参考资料如下:
float类型的变量与零值比较的if语句的写法:
NO
标准答案示例:

const float EPSINON = 0.00001;

if ((x >= - EPSINON) && (x <= EPSINON)

不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
出自林锐的高质量
zuoyangguang 2006-12-02
  • 打赏
  • 举报
回复
学习
Gary强z 2006-12-02
  • 打赏
  • 举报
回复
谢谢楼上 不过我想要的是上面这两个程序输出结果的原因。
zhangfan790913 2006-12-02
  • 打赏
  • 举报
回复
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;
}
}

你看这样解决是不是你要的结果

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧