double 表示这种类型的数值精度是 float 类型的两倍(有人称之为双精度数值)。绝大部 分应用程序都采用double 类型。在很多情况下,float 类型的精度很难满足需求。实际上,只 有很少的情况适合使用 float 类型,
例如,需要单精度数据的库, 或者需要存储大量数据。 float类型的数值有一个后缀 F 或 f (例如,3.14F)。没有后缀 F 的浮点数值(如 3.14 ) 默 认为double 类型。当然,也可以在浮点数值后面添加后缀 D 或 d (例如,3.14D)。 0
注?: 可以使用十六进制表示浮点数值。
例如,0.125=2—3 可以表示成 0xl.0p-3。在十六 进制表示法中,使用 p 表示指数, 而不是 e。注意, 尾数采用十六进制,指数采用十进 制。指数的基数是 2,而不是 10。所有的浮点数值计算都遵循 IEEE 754规范。具体来说,下面是用于表示溢出和出错情况 的三个特殊的浮点数值:
•正无穷大 •负无穷大 •NaN (不是一个数字) 例如,一 正整数除以 0 的结果为正无穷大。计算 0/0 或者负数的平方根结果为 NaN。
注?: 常量 Double_POSITIVE_INFINITY、Double.NEGATIVEJNFINITY 和 Double.NaN (以及相应的 Float 类型的常量)分别表示这三个特殊的值, 但在实际应用中很少遇到。 特别要说明的是, 不能这样检测一个特定值是否等于 Double.NaN: if (x = Double.NaN) // is never true 所有“ 非数值” 的值都认为是不相同的。然而,可以使用 Double.isNaN 方法:
if (Double.isNaN(x)) // check whether x is "not a number"
警告: 浮点数值不适用于无法接受舍入误差的金融计算中。 例如,命令 System.out.println ( 2.0-1.1 ) 将打印出 0.8999999999999999, 而不是人们想象的 0.9。这种舍入误差的主要 原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。这 就好像十进制无法精确地表示分数 1/3—样。如果在数值计算中不允许有任何舍入误差, 就应该使用 BigDecima丨类, 本章稍后将介绍这个类,