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

为什么c#中的十进制与其他c#类型不同?,c#,C#,我被告知decimal是作为用户定义的类型实现的,其他c#类型(如int)都有专门的操作码。这背后的原因是什么?decimal并不是唯一的例子DateTime、TimeSpan、Guid等也是自定义类型。我想主要原因是它们没有映射到CPUfloat(IEEE 754)、int等在这里非常普遍,但是decimal是为.NET定制的 只有当您想通过反射直接与操作符对话时(因为int等不存在操作符),这才会真正导致问题。我想不出还有什么其他情况下你会注意到这种差异 (实际上,仍然有结构等来表示其他结构

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

decimal
并不是唯一的例子
DateTime
TimeSpan
Guid
等也是自定义类型。我想主要原因是它们没有映射到CPU
float
(IEEE 754)、
int
等在这里非常普遍,但是
decimal
是为.NET定制的

只有当您想通过反射直接与操作符对话时(因为int等不存在操作符),这才会真正导致问题。我想不出还有什么其他情况下你会注意到这种差异

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

“这背后的原因是什么?”

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

另见:


我想重点是,decimal是唯一一种在C#中有自己关键字的类型,但CLR没有特别处理它。