.NET Decimal的二进制表示

时间:2010-09-27 06:04:55

标签: .net binary decimal representation

嘿所有,快速提问:.NET decimal类型如何在内存中以二进制形式表示?

我们都知道浮点数是如何存储的,因此存在不准确的原因,但除了以下内容之外,我找不到关于decimal的任何信息:

  1. 显然比浮点数更准确
  2. 占用128位内存
  3. 2 ^ 96 +符号范围
  4. 28(有时29?)数字中的有效数字
  5. 有什么方法可以解决这个问题吗?我的计算机科学家要求答案,经过一个小时的尝试研究,我找不到它。似乎有很多浪费的东西,或者我只是在脑海中想象这个错误。有人可以对此有所了解吗?感谢。

2 个答案:

答案 0 :(得分:35)

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

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

因此,为了表示3.261,你的尾数为3261,符号位为0(即正数),指数为3.注意,十进制没有规范化(故意),所以你可以也<例如,/ em>使用32610的尾数和4的指数表示3.2610。

我在decimal floating point的文章中提供了更多信息。

答案 1 :(得分:0)

https://www.csharpindepth.com/Articles/Decimal

  

小数如何存储?

     

即使严格只需要102位,十进制也会以128位存储。方便地将十进制视为三个代表尾数的32位整数,然后一个代表正负号和指数的整数。最后一个整数的最高位是符号位(通常,对负数设置为(1)),而16-23位(高16位字的低位)包含指数。其他位必须全部清零(0)。此表示形式是decimal.GetBits(decimal)给出的表示形式,它返回4个整数的数组。