Java中float和double的取值范围该怎样理解?

float(浮点型)大小(位):32它的范围是:-3.40292347E+38~~3.40292347E+38 默认值是: 0.0F
double(双精度)大小(位):64 它的范围是: -
1.79769313486231570E+308~~1.79769313486231570E+308 默认值是:0.0d

3.40292347E+38的取值范围该怎样理解,“3.40292347”,“E”,“+38”各
表示什么意思,查了很多网上关于IEEE 754的介绍,却没有找到合适的说明

基本类型float占4个字节,二进制位数有32位,取值范围为[-3.40282346638528860e+38 , -1.40129846432481707e-45] ∪ [1.40129846432481707e-45 ~ 3.40282346638528860e+38]。 

基本类型double占8个字节,二进制位数有64位,取值范围为[-1.79769313486231570e+308,-4.94065645841246544e-324] ∪  [4.94065645841246544e-324,1.79769313486231570e+308] 。

PS:其中e代表10的多少次方。

IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

扩展资料:

Java有两种浮点数据类型,第一种float使用32 bit表示,对应单精度浮点数,运行速度相比double更快,占内存更小,但是当数值非常大或者非常小的时候会变得不精确。精度要求不高的时候可以使用float类型。double为64位表示,将浮点数赋给某个变量时,如果不字面值后面加f或者F,则默认为double类型。java.lang.Math中的函数都采用double类型。如果double和float都无法达到想要的精度,可以使用BigDecimal类。



温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-13
java当中默认声明的小数是double类型的;
double d=4.0

如果声明:
float x = 4.0则会报错,需要如下写法:
float x = 4.0f或者float x = (float)4.0
其中4.0f后面的f只是为了区别double,并不代表任何数字上的意义

float 内存分配4个字节,占32位,有效小数位6-7位
double 型 内存分配8个字节,有效小数位15位

以下是示例代码:
flaot:
float x = 3.56412f;
float y = 5.13f;
System.out.println(x+y);
输出:8.69412

double:
double z = 3.564;
double a = 5.13;
System.out.println(z+a);
输出:8.693999999999999

如果需要精确计算,需要使用java.math.BigDecimal类进行计算:
/**
提供精确的加法运算。
@param v1 被加数
@param v2 加数
@return 两个参数的和
*/
public static double add(double v1,double v2)
{
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
输出:8.694
第2个回答  2010-07-03
在java中浮点型的 float double它们的取值范围基本上是没有限制的两都的区别应该说是在精确度上的区别; 32位的那个是int型 long型为64
32位的取值范围在正负21亿左右
第3个回答  推荐于2018-03-14
3.40292347E+38
就是3.40292347*10的38次方本回答被提问者和网友采纳
相似回答