<b>3.3.2 浮點類型</b>
浮點類型用于表示有小數部分的數值。在java中有兩種浮點類型,具體内容如表3-2所示。
表3-2 浮點類型
類型 存儲需求 取值範圍
f?loat 4位元組 大約±3.402 823 47e+38f(有效位數為6~7位)
double 8位元組 大約±1.797 693 134 862 315 70e+308(有效位數為15位)
double表示這種類型的數值精度是f?loat類型的兩倍(有人稱之為雙精度數值)。絕大部分應用程式都采用double類型。在很多情況下,f?loat類型的精度很難滿足需求。實際上,隻有很少的情況适合使用f?loat類型,例如,需要單精度資料的庫,或者需要存儲大量資料。
f?loat類型的數值有一個字尾f或f(例如,3.14f)。沒有字尾f的浮點數值(如3.14)預設為double類型。當然,也可以在浮點數值後面添加字尾d或d(例如,3.14d)。
注釋:可以使用十六進制表示浮點數值。例如,0.125=2-3可以表示成0x1.0p-3。在十六進制表示法中,使用p表示指數,而不是e。注意,尾數采用十六進制,指數采用十進制。指數的基數是2,而不是10。
所有的浮點數值計算都遵循ieee 754規範。具體來說,下面是用于表示溢出和出錯情況的三個特殊的浮點數值:
正無窮大
負無窮大
nan(不是一個數字)
例如,一個正整數除以0的結果為正無窮大。計算0/0或者負數的平方根結果為nan。
注釋:常量double.positive_infinity、double.negative_infinity和double.nan(以及相應的float類型的常量)分别表示這三個特殊的值,但在實際應用中很少遇到。特别要說明的是,不能這樣檢測一個特定值是否等于double.nan:
所有“非數值”的值都認為是不相同的。然而,可以使用double.isnan方法:
警告:浮點數值不适用于無法接受舍入誤差的金融計算中。例如,指令system.out.println (2.0–1.1)将列印出0.8999999999999999,而不是人們想象的0.9。這種舍入誤差的主要原因是浮點數值采用二進制系統表示,而在二進制系統中無法精确地表示分數1/10。這就好像十進制無法精确地表示分數1/3一樣。如果在數值計算中不允許有任何舍入誤差,就應該使用bigdecimal類,本章稍後将介紹這個類。