A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 红茶2331 中级黑马   /  2013-11-10 16:16  /  1914 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在做一道题的时候发现下面这个编译时错误的,
float f=5+5.5;
那我写成
float f =5.0+5.5f;为什么编译也错误5.0后面需要加f吗?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

7 个回复

倒序浏览
对,5.0后面也要加上f
回复 使用道具 举报
为什么呢
回复 使用道具 举报
我也感觉原因是什么啊?单精度不加f编译不过,是因为数据会缺失的原因吗?
回复 使用道具 举报
以我的理解
float f =5.0+5.5f//后面的5.0默认类型为double,不能和5.5f相加,所以5.0后面要加f定义其数据类型

回复 使用道具 举报
首先,java中默认的整数是int类型的,默认的浮点数是double类型的。
float f =5.0+5.5f;这句话的意思是:5.0是一个double类型的数据,5.5f是一个float类型的数据,两者相加,那么5.5f会有一个自动类型提升的动作,也就是会提升为double类型。
两者之和也就是一个double类型,你赋给一个float类型的变量,肯定会编译失败的。
你可以把5.0后面也加上一个f,或者把5.0后面的.0去掉,这样就没问题了。
回复 使用道具 举报
5.0默认是double类型的,跟5.5f相加,5.5f会自动提升成double型,结果也是double型,但你却赋值给float型,所以会编译失败。5.0也强制float型就没事了。
回复 使用道具 举报
楼主的的代码中,5属于int型,5.0属于double型,他们都有8个8位,而float只有4个8位,为了精确,系统只会自动提升数据长度,不会自动缩减,因此运行时float型自动提升为double型,结果10.5属于double型,结果要把double型的值赋给float型的变量,系统是绝对不允许的,因此会提示错误。
可做如下修改:
float f =(float)(5.0+5.5f);
或者double f = 5+5.5;
希望对你有所帮助,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马