2010-12-04 41 views
1

float的大小爲4個字節,長的大小爲8個字節。
因此,float的大小比long的大小要小。但是,浮動的範圍大於long。值的範圍取決於數據類型的大小?

小數和雙數的情況相同。

數據類型

+----------+------------+----------------------+ 
    | Data Type| Size  |  Range   | 
    +----------+------------+----------------------+ 
    | long | 8 bytes |-9.22e18 .. 9.22e18 | 
    | float | 4 bytes |-3.40e38 .. 3.40e38 | 
    | decimal | 16 bytes |-7.92e28 .. 7.92e28 | 
    | double | 8 bytes |-1.80e308 .. 1.80e308 | 
    +----------+------------+----------------------+ 

例子:

 decimal f = 10000000000000000000.0m;   //takes 16 bytes 
     double d = 10000000000000000000000000000.0d; //takes 8 bytes 

因此,雙能容納更大的價值,並採取粒徑小於decimal.Why?

+0

也看到了答案更情境版本的同一問題:http://stackoverflow.com/questions/4232590/casting-float-maxvalue-to-long-throws-exception。也許最重要的是,請閱讀本文檔:http://docs.sun.com/source/806-3568/ncg_goldberg.html – 2010-12-04 15:09:59

回答

1

由於雙一直致力於更多的比特指數比十進制數。

0

因爲你失去了一些精度,雙和浮動較大的值。查看IEEE Standard for Floating-Point Arithmetic的準確方程。

說得非常簡單地認爲它是這樣的。如果我給你2個位數的數字來表示你代表一對夫婦的方式,這個數字的值...

如果只是追隨數字書寫的通常慣例和你的範圍是00 - > 99。然而,你可以選擇以科學記數法編碼你的兩個數字,那麼你的範圍將是0 x 10^0 - > 9 x 10^9。

在端兩者的編碼表示相同的數量的可能的值的,但是,從以後的編碼的範圍要大得多。

+0

我不確定我是否理解你最後一句話的含義。如果它們都代表相同數量的可能值,那麼它們如何具有更大的範圍? – 2010-12-04 15:13:20

0

在內部,浮點數是近似值。它們不像整數那樣是確切的值。所以,你在雙打範圍內獲得的收益,你支付的準確性。你對雙打的操作越多(增加,減少......)越失去準確性。對於大多數計算來說,雙打是完美的,但對於貨幣計算,你一定要使用小數。

相關問題