专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 浮点数类型详解

浮点数类型详解

更新时间:2022-08-25 09:42:06 来源:动力节点 浏览597次

相信大家对Java的数据类型都已经有所了解,浮点数类型就是其中之一。在Java中,实数使用float和double数据类型表示。float类型是32位单精度浮点数,double类型是64位双精度浮点数。这两种类型都符合IEEE 754-1985标准。这个标准规定了浮点数的格式和运算方式。

浮点数可以以字面量的形式写在Java程序中,其格式为一些可选数字,后面跟一个小数点和一些数字,例如:

123.45
0.0
.01

浮点数字面量还可以使用指数形式(科学计数法)表示。其格式为一个数后面跟着字母e或者E和一个数,第二个数表示10的次方,是第一个数的乘数。例如:

1.2345E02     // 1.2345 * 10^2或123.45
1e-6      // 1 * 10^-6或0.000001
6.02e23     //阿伏加德罗常数:6.02 * 10^23

默认情况下,浮点数都是double类型,若想在程序中使用float类型,要在数字后面加上f或者F,例如:

double d = 6.02E23;
float f = 6.02e23f;

浮点数字字面量不能使用十六进制,二进制或者八进制表示。

浮点数表示的值

由于本质上的限制,大多数实数都不能使用有限的位数进行精确表示,因此要记住,float和double类型都只能表示实际值的近似值。float类型是32位近似值,至少有6个有效数字,double是64位近似值,至少有15个有效数字。

除了表示普通的数字之外,float和double还能表示四个特殊的值:正无穷大,负无穷大,零和NaN。如果浮点数运算的结果超出了float或double能表示的范围上线得到的是无穷大。如果浮点数的运算结果超出了float或double能表示的范围下限,得到的是零。

Java的浮点类型区分正零和负零,具体是哪个值取决于从哪个方向出现的下溢,在实际使用中,正零和负零的表现基本一样。最后一种特殊的浮点数NaN,是“Not-a-Number”的简称,表示“不是数字”。如果浮点数运算不合法,例如0.0/0.0,得到的就是NaN,例如:

double inf = 1.0/0.0;     // 无穷大
double neginf = -1.0/0.0;    // 负无穷大
double negzero = -1.0/inf;    // 负零
double NaN = 0.0/0.0;   // NaN

Java浮点数类型能处理到无穷大的上溢以及到零的下溢,因此浮点数运算从不抛出异常,就算执行非法运算也没事,例如零除以零,或者计算负数的平方根。

float和double基本类型都有对应的包装类,分别为Float和Double。这两个类都定义了一些有用的常量,如:MIN_VALUE、MAX_VALUE、NEGATIVE_INFINITY、POSITIVE_INFINITY 和 NaN。

无穷大浮点数的表现和设想的一样,例如,无穷大之间的加减运算得到的还是无穷大,负零的表现几乎和正零一样。而且实际上,相当判断运算符==会告诉你,负零和正零是相等的,区分正零和负零还有普通的零有一种方法,把它作为被除数:1.0/0.0得到的是正无穷大,但是1.0/负零得到的是负无穷大。因为NaN不是数字,所以==运算符会告诉我们它不等于任何其它数字,甚至包括它自己,若是想检查某个float或者double值是否为NaN,必须使用 Float.isNaN() 或 Double.isNaN() 方法。如果大家想了解更多相关知识,不妨俩关注一下动力节点的Java教程,里面有更丰富的知识等着大家去学习,希望对大家能够有所帮助哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>