C#十进制类型相等

时间:2011-09-20 19:12:34

标签: c# .net floating-point decimal equality

C#十进制类型的相等比较是否比其他浮点类型更直观地预期?

2 个答案:

答案 0 :(得分:5)

我想这取决于你的直觉。我会假设有些人会想到将1乘以3除以1/3的结果,而其他人会想到更多的“哦,1除以3不能表示为十进制数,我们将要确定要保留多少位数,让我们用0.333“。

如果您以前一种方式思考,Decimal对您没有多大帮助,但如果您以后一种方式思考,并且在需要时明确关于舍入,则更有可能是“直观地”操作“不受十进制舍入误差的影响,例如除以10,将按预期运行。对于大多数人来说,这比二进制浮点类型的行为更直观,其中2的幂表现得很好,但10的幂则不行。

答案 1 :(得分:4)

基本上没有。 Decimal类型只是表示一种特殊的浮点数,旨在减少基本10系统中的舍入错误 。也就是说,Decimal的内部表示实际上是基数10(否定)而不是通常的二进制。因此,它是一种更合适的货币计算类型 - 尽管当然不限于此类应用。

从结构MSDN page开始:

  

十进制值类型表示十进制数,范围从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335。 Decimal值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算。 Decimal类型不会消除舍入的需要。相反,它最大限度地减少了因舍入而导致的错误。例如,以下代码生成的结果为0.9999999999999999999999999999而不是1.

     

十进制数是一个浮点值,由一个符号,一个数值组成,其中值中的每个数字的范围为0到9,以及一个缩放因子,指示分隔积分的浮点小数点的位置和数值的小数部分。