嘿所有,快速提问:.NET decimal
类型如何在内存中以二进制形式表示?
我们都知道浮点数是如何存储的,因此存在不准确的原因,但除了以下内容之外,我找不到关于decimal
的任何信息:
有什么方法可以解决这个问题吗?我的计算机科学家要求答案,经过一个小时的尝试研究,我找不到它。似乎有很多浪费的东西,或者我只是在脑海中想象这个错误。有人可以对此有所了解吗?感谢。
答案 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个整数的数组。