float和double类型的区别

int i1 = 123;
int i2 = 456;
double d1 = (i1+i2)*1.2;
float f1 = (float)((i1+i2)*1.2)

比如这个,为什么((i1+i2)*1.2)的结果是double类型的,需要强制转换成float类型。
不是一半浮点数的默认类型是float吗?

float和double类型的区别如下:

1、变量类型不同

float属于单精度型浮点数据。

double属于双精度型浮点数据。

2、指数范围不同

float的指数范围为-127~128。

double而double的指数范围为-1023~1024

3、表达式指数位不同

float的表达式为1bit(符号位)+8bits(指数位)+23bits(尾数位)

double的表达式为1bit(符号位)+ 11bits(指数位)+ 52bits(尾数位)

4、占用内存空间不同

float占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38。

double占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。

5、有效位数不同

float只能提供七位有效数字。

double可提供16位有效数字。

参考资料来源:百度百科——浮点型数据

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-21
  double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。
  类型 比特数 有效数字 数值范围
  float 32 6-7 -3.4*10(-38)~3.4*10(38)
  double 64 15-16 -1.7*10(-308)~1.7*10(308)
  long double 128 18-19 -1.2*10(-4932)~1.2*10(4932)
  简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字。本回答被网友采纳
第2个回答  2012-05-01
java中有这样一个规则:
只要带有小数点的数,它的默认类型就是dobule类型
如: num=2.4;//这个num的数据类型是double
num1=2.4f;//那么这个num1的数据类型就是float类型
拿你的例子来说:
d1 = (i1+i2)*1.2;//这一步,d1的默认数据类型是:double
当用float类型的数据接收的时候,就需要强制转化-->把d1这个double类型的数据强制转化为flaot类型.
希望能帮到你,我说的不明白的话,再问
第3个回答  2012-05-01
float是单精度浮点型,double是双精度浮点型。float到double不需要转换,编译会自动进行转化。但从double到float就需要强制转换。不过没有特殊状况最好不要这样做,因为这样可能会的到不是你想要的结果。
第4个回答  推荐于2017-10-12
默认的浮点数都是double 只有在数组后边加上f才是 float的
float f=12.2f;
这是定义一个float类型的数据本回答被提问者采纳
相似回答