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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 就是我 中级黑马   /  2016-3-28 11:19  /  586 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

float f=3.45;//会报错,系统默认小数位double类型,默认整数位int类型
也就是说直接写出来的整数 123,都默认为int类型
但是 byte b=123;却不会报错
有人说是编译器可以识别整数具体值进行提前判断
但是3.45在我看来也在float类型中啊,float类型范围比double类型小,应该可以识别判断在范围内才是啊
有点矛盾

3 个回复

倒序浏览
float和double是精度的不同,就是小数点后面的位数越多就越精确.小数默认为double,你把double给float当然有可能会损失精度(小数点后面的位数可能会减少)所以不行.

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 赞一个!

查看全部评分

回复 使用道具 举报
123为int类型的二进制:00000000  00000000  00000000  01111011     而byte 是2个字节为 00000000  01111011 所以可以赋值,而double类型的小数位比float多,例如1.200和1.200000;计算机认为1.200000比1.200精度高,所以把double类型赋值给float有失精度,所以会报错。。

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 赞一个!

查看全部评分

回复 使用道具 举报
是不是后边忘加f了呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马