浮点-是“;十进制“;键入C#二进制编码的十进制

本文关键字:十进制 二进制 编码 键入 浮点 | 更新日期: 2023-09-27 17:58:32

我想使用C#处理十进制货币(EUR)的价格,而不用担心舍入错误,也不用滚动我自己的十进制算术方法。decimal类型的C#参考表示

与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使其适用于财务和货币计算。

什么?

我不在乎精度,我只想要大约七个sig无花果。但是我想知道5.31 EUR是一个精确的值。A、 二进制编码的十进制类型将是理想的。所以我的问题是C#decimal是否就是那种类型。

浮点-是“;十进制“;键入C#二进制编码的十进制

不,它不是BCD(每个数字都以特定的位数单独编码)-但你不希望它是。(我当然从未声称它是。)

decimal是一种浮点类型,因为它有一个有效位和一个指数,都是整数——只是与floatdouble不同;点";被指数移位的是小数点,而不是二进制点。不幸的是MSDN说";与浮点类型相比;当它真正意味着";与二进制浮点类型相比";。

decimal文档确实让它变得相当清晰:

十进制数是一个浮点值,由一个符号、一个数值和一个比例因子组成,其中数值中的每个数字的范围从0到9,比例因子指示浮点小数点的位置,浮点小数点用于分隔数值的整数部分和小数部分。

Decimal值的二进制表示由一个1位符号、一个96位整数和一个比例因子组成,该比例因子用于划分96位整数并指定其哪一部分是十进制分数。比例因子隐含地是数字10,提升到0到28范围内的指数。因此,十进制值的二进制表示形式为(-296到296)/10(0到28),其中-(296-1)等于MinValue,21等于MaxValue。有关Decimal值的二进制表示形式和示例的更多信息,请参阅Decimal(Int32[])构造函数和GetBits方法。