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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陌忆 中级黑马   /  2015-11-2 21:40  /  1523 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

float a= 2.33f;
不写f结果有什么不一样

18 个回复

倒序浏览
类型不同吧
回复 使用道具 举报
好像有一点不一样。。。。。float。。。。。double。。。。
回复 使用道具 举报

前面已经定义成float类型了,怎么会类型不同
回复 使用道具 举报
huihui1030 发表于 2015-11-2 21:47
好像有一点不一样。。。。。float。。。。。double。。。。

已经定义成float类型了啊
回复 使用道具 举报
865393462 来自手机 中级黑马 2015-11-2 22:00:59
地板
定义的是float赋值的是double
回复 使用道具 举报
陌忆 发表于 2015-11-2 21:57
已经定义成float类型了啊

float类型赋值时候的表示就是要加f。
回复 使用道具 举报
陌忆 中级黑马 2015-11-2 22:02:14
8#
865393462 发表于 2015-11-2 22:00
定义的是float赋值的是double

运行结果有什么不一样,会报错么?

点评

你可以运行的看看!  发表于 2015-11-2 22:04
回复 使用道具 举报
陌忆 中级黑马 2015-11-2 22:42:35
9#
huihui1030 发表于 2015-11-2 22:01
float类型赋值时候的表示就是要加f。

不加f有什么影响啊
回复 使用道具 举报
这样会导致精度损失,就好比int a=1.8;如果打印a,终端会提示警告,但是可以编译,返回1;加f和不加f都是返回2.330000;但是2.33f是单精度浮点型,有效位数7位,2.33是双精度,有效位数15位,如果数字足够长,就会显示精度损失.比如定义float a=2.343324532f,double b=2.343324532打印a.b返回小数点后9位,,返回结果就是前者精度损失,
回复 使用道具 举报
默认是doule,加上f代表是float类型,它们的精确度不同
回复 使用道具 举报
不同就是不加f会默认2.33为double类型,加了f则2.33f会是float类型,所以既然你定义了float类型就要加上f,不然会又警告
回复 使用道具 举报
加f 它的类型是float  不加是double类型。
回复 使用道具 举报
系统编译时会进行警报提醒,这样是不行的.需要消除,按照你设置的这个值来说不会影响打印结果,不过复杂运算时机会出现问题
回复 使用道具 举报
poxiao 中级黑马 2015-11-15 19:14:39
15#
应该是你如果不加f,系统会扩充float类型以double类型来存储这个值,但是你加了f系统就会使用float类型来存储这个值,这两种方式的存储精度是不一样的
回复 使用道具 举报
相当于把double类型转换成float类型,低精度转高精度可以隐式转换,高精度转低精度要强制转换吧。
回复 使用道具 举报
这是2个不同精度啊  2.33f是单精度,2.33是双精度,你这样写的话,就等于是高精度向低精度转换。会丢失精度的
回复 使用道具 举报
yufang1993 发表于 2015-11-2 22:43
这样会导致精度损失,就好比int a=1.8;如果打印a,终端会提示警告,但是可以编译,返回1;加f和不加f都是返回2.3 ...

大神正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马