为什么c#中的十进制与其他c#类型不同?


Why decimal in c# is different from other c# types?

我听说decimal是作为用户定义的类型实现的,而其他c类型(如int)则有专门的操作码。这背后的原因是什么?


这里不是只有decimalDateTimeTimeSpanGuid等也是自定义类型。我想主要原因是它们没有映射到CPU主活动。float(ieee 754)、int等在这里非常普遍,但decimal是定制给.net的。

这只会在您想通过反射直接与操作员交谈时真正导致问题(因为int等不存在)。我想不出任何其他你会注意到差异的场景。

(实际上,仍然有结构等来表示其他的-它们只是缺少您可能期望在其中的大部分内容,例如运算符)


"What's the reasoning behind this?"

十进制数学是在软件和硬件中处理的。目前,许多处理器不支持本机十进制(财务十进制与浮点)数学。但随着IEEE754R的采用,情况正在发生变化。

另请参见:

    百万千克1十进制与双速百万千克1百万千克1http://software.intel.com/en-us/blogs/2008/03/06/intel-decimal-floating-point-math-library/百万千克1百万千克1http://grouper.ieee.org/groups/754/百万千克1