2010-12-04 89 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

在内部,浮点数是近似值。它们不像整数那样是确切的值。所以,你在双打范围内获得的收益,你支付的准确性。你对双打的操作越多(增加,减少......)越失去准确性。对于大多数计算来说,双打是完美的,但对于货币计算,你一定要使用小数。

相关问题