vb/c#decimal内部格式

Jay*_*Jay 3 .net c# vb.net types

VB或C#中"十进制"值的内部格式是什么?

我不知道这对我正在做的任何事都很重要,但这是其中一件很有趣的事情.比如,知道多少位和负数如何存储可能意味着当你看到一个负数出现在你预期的正面时,你可以立刻想到,"啊,有一个溢出",而不是被深深的黑暗奥秘困惑.

Dav*_*nan 8

您的问题的答案由文档提供完整的技术说明:

十进制值类型表示十进制数,范围从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335.十进制值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算.Decimal类型不会消除舍入的需要.相反,它最大限度地减少了因舍入而导致的错误.

十进制数是一个浮点值,由一个符号,一个数值组成,其中值中的每个数字范围从0到9,以及一个缩放系数,表示浮动小数点的位置,用于分隔积分和小数部分的数值.

Decimal值的二进制表示由1位符号,96位整数和用于划分96位整数的比例因子组成,并指定它的小数部分.缩放因子是隐式地数目为10,升温至指数取值范围为0至28.因此,十进制值的二进制表示的形式为,((-2 96到2 96)/ 10 (0〜28) ),其中-2 96 -1等于MinValue,2 96 -1等于MaxValue.有关Decimal值的二进制表示的详细信息和示例,请参阅Decimal(Int32 [])构造函数和GetBits方法.

缩放因子还保留十进制数中的任何尾随零.尾随零不影响算术或比较运算中的十进制数的值.但是,如果应用了适当的格式字符串,则ToString方法可以显示尾随零.

和二进制表示,如文档中所述GetBits:

十进制数的二进制表示由1位符号,96位整数和用于除以整数的缩放因子组成,并指定它的哪个部分是小数.缩放因子隐含地为数字10,增加到范围从0到28的指数.

返回值是32位有符号整数的四元素数组.

返回数组的第一,第二和第三个元素包含96位整数的低,中和高32位.

返回数组的第四个元素包含比例因子和符号.它由以下部分组成:

低位字0到15位未使用,必须为零.

位16到23必须包含0到28之间的指数,表示除以整数的10的幂.

第24至30位未使用,必须为零.

位31包含符号:0表示正数,1表示负数.

注意,位表示区分负零和正零.在所有操作中,这些值被视为相等.