我新来的菜鸟,问个简单的float和double的问题,谢谢大家帮我看看

xho22 2008-01-22 03:01:06
就是,主要是第2个,问下
//*******1******
float f1 = 1.0f;
double d1 = 1.0;
//*******2******
System.out.println(f1==d1); //输出true
float f2 = 1.1f;
double d2 = 1.1;
System.out.println(f2==d2); //为什么这里输出false??

//*******3******
float f1 = 1.1f;
double d1 = 1.1f; //和第2个,这里多了个f
System.out.println(f1==d1);//又输出 true了

为什么呢?
...全文
132 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xho22 2008-01-22
  • 打赏
  • 举报
回复
4楼大哥说了很好,谢谢了
但是,我现在被你说的,就是感觉==很深奥阿
照你最后一句的话,
如果我改成d1==f1,就说明把d1转换成float在和f1比较?
xho22 2008-01-22
  • 打赏
  • 举报
回复
我也知道这是无意义的,但这正是我面试过的一道题目,有点刁钻,我又没办法
边城狂人 2008-01-22
  • 打赏
  • 举报
回复
1.1f是申明为float的1.1,4字节保存
1.1是默认的double的1.1,8字节保存

double d1 = 1.1f是把float的1.1转换成double的1.1(注意这个转换后的double的1.1和直接写的也是double型的1.1值可能不同)
f1 == d1的时候是把f1转换成double再和d1比较的,这时候两边都是从float的1.1转换过来的double的1.1,所以值相同。
believefym 2008-01-22
  • 打赏
  • 举报
回复
浮点数是不精确的
gongyali2005 2008-01-22
  • 打赏
  • 举报
回复
应该全都是TRUE,你把你的全部的代码写上.看是不是有侍值两次的情况.
边城狂人 2008-01-22
  • 打赏
  • 举报
回复
无论什么语言,作为浮点数的float和double都不是精确保存的值,所以,不要用=号来比较两个浮点数,这个比较是没什么意义的。

62,623

社区成员

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

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