2010-09-27 24 views
15

嘿,所有,快速的问题:如何在内存中的二进制代码的.NET decimal.NET十进制的二进制表示形式

我们都知道浮点数是如何存储和正是如此的原因及其不准确的,但我不能找到除了以下有关的任何信息decimal

  1. 显然超过浮点精确点号码
  2. 注意到的存储器128位
  3. 2^96 +符号范围
  4. 28(有时29?)的数量总显著数字

有什么办法可以解决这个问题吗?我的计算机科学家要求答案,经过一个小时的尝试研究,我找不到它。看起来好像有很多浪费的东西,或者我只是想象着我脑海中的错误。任何人都可以对此有所了解吗?谢谢。

回答

30

Decimal.GetBits获取您想要的信息。

基本上它是一个96位整数作为尾数,再加上一个符号位,再加上一个指数来表示有多少个十进制位置可以将它移到右边。

所以代表3.261你有3261尾数,0(即正)的符号位,而小数点不归(故意)的3.注意的指数,所以你可以代表例如,通过使用32610的尾数和4的指数来计算3.2610。

我在我的文章decimal floating point有更多的信息。

+0

+1奇妙的答案,正确的重点和丰富的信息。 – JoshD 2010-09-27 06:15:53

+0

@Jacob:不,那*显然*不是真的。考虑到你可以从一个整数开始并以0.1结束,那显然是正确的。如果你只能*转移到左边,你可以代表10,100等 - 但不是0.1,0.01等等。将来,请等待一个“ack”,然后再改变答案的含义。请参阅'decimal'的文档:http://msdn.microsoft.com/en-us/library/1k2e8atx.aspx - 其中缩放因子被称为“分割”整数,相当于将其转换为对。 – 2013-02-13 06:45:11

+0

我的歉意。对我来说,更直观地把它看作是将*小数点*移到*左*,但我现在看到你指的是“移位”尾数。 – Jacob 2013-02-13 15:59:32

相关问题