维基百科上的Decimal Floating Point文章,其中包含有关此文章的特定链接System.Decimal.
十进制存储在128位中,即使只有102也是必需的.将十进制视为表示尾数的三个32位整数,然后是表示符号和指数的一个整数是很方便的.最后一个整数的最高位是符号位(以正常方式,位为负数设置(1))和位16-23(高16位字的低位)包含指数.其他位必须全部清零(0).此表示形式是decimal.GetBits(decimal)给出的表示形式,返回4个整数的数组.
来自C# 语言规范:
\n\n\n\n该
\n\ndecimal类型是适合金融和货币计算的 128 位数据类型。
\n 该decimal类型可以表示范围从 1.0 \xc3\x97 10 \xe2\x88\x9228到大约 7.9 \xc3\x97 10 28的值,具有 28-29 个有效数字。type 的有限值集的
\n\ndecimal形式为 (\xe2\x80\x931) s \xc3\x97 c \xc3\x97 10 - e,其中符号s为 0 或 1,系数c由 0 \ xe2\x89\xa4 c < 2 96,小数位数e为 0 \xe2\x89\xa4 e \xe2\x89\xa4 28。
\n 该decimal类型不支持有符号零、无穷大或 NaN\'s 。Adecimal表示为按 10 的幂缩放的 96 位整数。对于绝对值小于 1.0m 的小数,该值精确到小数点后第 28 位,但不再保留。对于绝对值大于或等于1.0m的小数,该值精确到28或29位。与
\n\nfloat和double数据类型相反,十进制小数(例如 0.1)可以用十进制表示形式精确表示。\n 在float和double表示形式中,此类数字通常是无限分数,使得这些表示形式更容易出现舍入错误。如果二元运算符的操作数之一为 类型
\n\ndecimal,则另一个操作数必须为整型或 类型decimal。如果存在整型操作数,则decimal在执行操作之前将其转换为整型。对类型值进行运算的结果
\n\ndecimal是计算精确结果(保留为每个运算符定义的比例)然后舍入以适合表示的结果。结果将四舍五入到最接近的可表示值,并且当结果同样接近两个可表示值时,四舍五入到最低有效数字位置中具有偶数的值(这称为 \xe2\x80\x9cbanker\xe2\ x80\x99s 舍入\xe2\x80\x9d)。零结果的符号始终为 0,小数位数为 0。如果十进制算术运算产生的值的绝对值小于或等于 5 \xc3\x97 10 -29,则运算结果为零。如果十进制算术运算产生的结果对于格式来说太大,则会抛出
\n\ndecimala 。System.OverflowException该
\ndecimal类型比浮点类型具有更高的精度,但范围更小。因此,从浮点类型到 的转换decimal可能会产生溢出异常,而从decimal浮点类型到浮点类型的转换可能会导致精度损失。由于这些原因,浮点类型 和 之间不存在隐式转换,并且如果没有显式强制转换,则不可能在同一表达式中decimal混合浮点和操作数。decimal