值的范围取决于数据类型的大小?

时间:2010-12-04 14:43:31

标签: c# types

float的大小为4个字节,long的大小为8个字节 因此,float的大小小于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

因此,double可以保持更大的值并且比decimal更小。为什么?

3 个答案:

答案 0 :(得分:1)

因为double为指数赋予了比小数更多的位。

答案 1 :(得分:0)

因为你使用double而松散了一些精度,而对于较大的值则浮动。看一下IEEE Standard for Floating-Point Arithmetic的确切方程式。

简单地说就是这样想的。如果我给你2个单位数字代表一个值,你可以通过几种方式表示这个数字......

如果您只是遵循写入数字的正常惯例而且您的范围将是00 - > 99.但是,您可以选择以科学计数法对两个数字进行编码,然后您的范围将为0 x 10 ^ 0 - > 9 x 10 ^ 9。

最后,两种编码都表示相同数量的可能值,但后面编码的范围要大得多。

答案 2 :(得分:0)

在内部,浮点数是近似值。它们不是整数的精确值。那么你在双打范围内获得的收益,你付出的准确性。你对双打(增加,减去......)所做的操作越多,他们就越失去准确性。对于大多数计算,双打是完美的,但对于货币计算,你肯定想要使用小数。