Java基本数据类型の浮点型

来源:互联网 发布:股票交易算法 编辑:程序博客网 时间:2024/05/22 08:13

Java的浮点类型有两种:float和double。Java的浮点类型有固定的表数范围和字段长度,字段长度和表数范围和机器无关。Java的浮点数遵循IEEE754标准,采用二进制数据的科学计数法来表示浮点数,对于float型数值,第1位是符号位,接下里8位表示指数,再接下来的23位表示尾数;对于double类型数值,第一位也是符号位,接下来的11位表示指数,再接下来的52位表示尾数。

因为Java浮点数使用二进制数据的科学记数法来表示浮点数,因此可能不能精确表示一个浮点数,使用double类型的浮点数比float类型的浮点数更精确,但如果浮点数的精度足够高,依然可能发生这种情况,如果开发者需要精确保存一个浮点数,则可以考虑使用BigDecimal类。

double类型代表双精度浮点数,float类型代表单精度浮点数。一个double类型的数值占8字节、64位,一个float类型的字节占4字节,32位。Java语言的浮点数有两种表现形式:

>十进制数形式:这种形式就是简单的浮点数,例如5.12、512.0、.512 。浮点数必须包含一个小数点,否则会被当成int类型处理。

>科学记数法形式:例如5.12e2,5.12E2,表达的值是一样的。

必须指出的是,只有浮点类型的数值才可以使用科学记数法的形式来表示。例如,51200是一个int类型的值,但是512E2则是浮点类型的值。

Java语言的浮点类型默认是double类型,如果希望Java把一个浮点类型值当成float类型处理,应该在这个浮点类型值后紧跟f或F。例如,5.12代表一个double类型的值,占64位的内存空间;5.12f或5.12F才表示一个float类型的值,占32位的内存空间。当然,也可以在一个浮点数后添加d或D后缀,强制指定double类型,但通常没必要。

Java还提供了三个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。例如,使用一个正数除以0将得到正无穷大,使用一个负数除以0将得到负无穷大,0.0除以0.0或对一个负数开方将得到一个非数。正无穷大通过Double或Float类的POSITIVE_INFINITY表示;负无穷大通过Double或Float类的NEGATIVE_INFINITY表示,非数则通过Double或Float类的NaN表示。所有的正无穷大数值都是相等的,所有的负无穷大数值都是相等的;而NaN不与任何数值相等,甚至和NaN都不相等。

只有浮点数除以0才可以得到正无穷大或负无穷大,因为Java语言会自动把和浮点数运算的0(整数)当成0.0(浮点数)处理。如果一个正数除以0,则会抛出一个异常:ArithmeticException:/by zero(除以0异常)。


数值中使用下划线分隔

当程序中用到的数值位数特别多时,程序员眼睛看花了都看不出有多少位数。为了解决这种问题,Java7引入了一个新功能:程序员可以在数值中使用下划线,不管是整形数值,还是浮点型数值,都可以自由的使用下划线。通过使用下划线分割,可以更直观的分辨数值中到底包含多少位。如下面程序所示:

int bigval = 0B1000_0000_0000_0000_0000_0000_0000_0011;double pi = 3.14_15_92_65_36;


原创粉丝点击