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

float(浮点型)大小(位):32它的范围是:-3.40292347E+38~~3.40292347E+38默认值是:0.0Fdouble(双精度)大小(位):64它的... 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的介绍,却没有找到合适的说明
展开
 我来答
丹眼皮男生
2018-12-13 · TA获得超过978个赞
知道答主
回答量:65
采纳率:0%
帮助的人:5.2万
展开全部

基本类型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类。



samismiling
推荐于2016-08-13 · 知道合伙人软件行家
samismiling
知道合伙人软件行家
采纳数:1340 获赞数:5604

向TA提问 私信TA
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syj1164
2010-07-03
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
在java中浮点型的 float double它们的取值范围基本上是没有限制的两都的区别应该说是在精确度上的区别; 32位的那个是int型 long型为64
32位的取值范围在正负21亿左右
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shiva1981
推荐于2018-03-14 · TA获得超过773个赞
知道小有建树答主
回答量:638
采纳率:0%
帮助的人:761万
展开全部
3.40292347E+38
就是3.40292347*10的38次方
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式