黑马程序员技术交流社区

标题: 关于赋值 [打印本页]

作者: 陌忆    时间: 2015-11-2 21:40
标题: 关于赋值
float a= 2.33f;
不写f结果有什么不一样
作者: arhui    时间: 2015-11-2 21:42
类型不同吧
作者: huihui1030    时间: 2015-11-2 21:47
好像有一点不一样。。。。。float。。。。。double。。。。
作者: 陌忆    时间: 2015-11-2 21:56
arhui 发表于 2015-11-2 21:42
类型不同吧

前面已经定义成float类型了,怎么会类型不同
作者: 陌忆    时间: 2015-11-2 21:57
huihui1030 发表于 2015-11-2 21:47
好像有一点不一样。。。。。float。。。。。double。。。。

已经定义成float类型了啊
作者: 865393462    时间: 2015-11-2 22:00
定义的是float赋值的是double
作者: huihui1030    时间: 2015-11-2 22:01
陌忆 发表于 2015-11-2 21:57
已经定义成float类型了啊

float类型赋值时候的表示就是要加f。
作者: 陌忆    时间: 2015-11-2 22:02
865393462 发表于 2015-11-2 22:00
定义的是float赋值的是double

运行结果有什么不一样,会报错么?
作者: 陌忆    时间: 2015-11-2 22:42
huihui1030 发表于 2015-11-2 22:01
float类型赋值时候的表示就是要加f。

不加f有什么影响啊
作者: yufang1993    时间: 2015-11-2 22:43
这样会导致精度损失,就好比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位,,返回结果就是前者精度损失,
作者: liruixue    时间: 2015-11-4 10:42
默认是doule,加上f代表是float类型,它们的精确度不同
作者: 许本亮    时间: 2015-11-4 16:47
不同就是不加f会默认2.33为double类型,加了f则2.33f会是float类型,所以既然你定义了float类型就要加上f,不然会又警告
作者: 仰望星空的猪    时间: 2015-11-14 18:06
加f 它的类型是float  不加是double类型。
作者: lixiang73033    时间: 2015-11-15 18:09
系统编译时会进行警报提醒,这样是不行的.需要消除,按照你设置的这个值来说不会影响打印结果,不过复杂运算时机会出现问题
作者: poxiao    时间: 2015-11-15 19:14
应该是你如果不加f,系统会扩充float类型以double类型来存储这个值,但是你加了f系统就会使用float类型来存储这个值,这两种方式的存储精度是不一样的
作者: wwpower    时间: 2015-11-15 20:21
相当于把double类型转换成float类型,低精度转高精度可以隐式转换,高精度转低精度要强制转换吧。
作者: 沐小妖mavs    时间: 2015-11-15 21:22
这是2个不同精度啊  2.33f是单精度,2.33是双精度,你这样写的话,就等于是高精度向低精度转换。会丢失精度的
作者: 364827317    时间: 2015-11-15 23:37
yufang1993 发表于 2015-11-2 22:43
这样会导致精度损失,就好比int a=1.8;如果打印a,终端会提示警告,但是可以编译,返回1;加f和不加f都是返回2.3 ...

大神正解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2