为什么C#中的十进制类型与其他类型不同?
为什么C#中的十进制类型与其他C#类型不同?
在C#中,十进制数的处理是通过软件而不是硬件来完成的。目前,许多处理器不支持原生的十进制(与浮点数相比)数学运算。然而,随着IEEE 754R的采用,情况正在发生变化。
为了更好地理解为什么C#中的十进制类型与其他类型不同,可以参考以下链接:
- http://software.intel.com/en-us/blogs/2008/03/06/intel-decimal-floating-point-math-library/
- http://grouper.ieee.org/groups/754/
以上链接提供了更多关于C#中十进制类型的原因和解决方法的信息。
为什么C#中的十进制类型(decimal)与其他C#类型不同?
在C#中,除了十进制类型(decimal)之外,DateTime
、TimeSpan
、Guid
等也是自定义类型。我想主要原因是它们不映射到CPU原语。float
(IEEE 754)、int
等在这里非常普遍,但是十进制类型(decimal)是专为.NET定制的。
只有在需要通过反射直接与操作符交互时,这才会真正成为一个问题(因为针对int等类型的操作符并不存在)。我想不出其他任何情况下你会注意到这种差异。
(实际上,还有一些结构体等用于表示其他类型 - 它们只是缺少你可能期望其中包含的大部分内容,例如操作符)
我认为重点是十进制类型(decimal)是C#中唯一一个拥有自己关键字但在CLR中并未特殊处理的类型。