2011-09-20 78 views
2

是对C#小数类型的任何更容易上班,我们会直觉地想到比其他浮点类型的相等比较?C#小数类型平等

回答

5

我想这取决于你的直觉。我假设有些人会想到将1除以3​​作为分数1/3的结果,而其他人会认为更多地沿着“哦,1除以3不能用十进制数表示,必须决定保留多少位数字,让我们以0.333为单位“。

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

+0

-1因为这不是真的回答这个问题,除了重新提供我以前的答案。 – Noldorin

+0

@Noldorin - 我不同意这是一个重复,因为你的回答不包括二进制算术对大多数人来说不直观的问题。另外,我不同意你回答“否”,认为平等问题更有可能按预期工作。不要说使用平等是一个好主意,但看看例如由于数字类型为二进制而导致问题的各种网站上的困惑Javascript用户的数量 –

+0

与直观无关......这仅仅是内部表示和完成方式,我将从MSDN中讨论并引用。咩。 – Noldorin

4

基本上没有。所述Decimal类型简单地表示一个专门的排序,其被设计来减少舍入误差特别是在底座10系统浮点数的。也就是说,Decimal的内部表示实际上是以10为底(denary),而不是通常的二进制。因此,这对于货币计算来说是一种更合适的类型 - 尽管当然不限于这种应用。

MSDN page为以下结构:

十进制值类型表示十进制数范围从正到79,228,162,514,264,337,593,543,950,335负79,228,162,514,264,337,593,543,950,335。十进制值类型适用于需要大量重要整数和小数位并且没有舍入误差的财务计算。十进制类型并不排除舍入的需要。相反,它最大限度地减少了四舍五入造成的错误。例如,下面的代码产生0.9999999999999999999999999999而不是1的结果。

十进制数是一个浮点值,它包含一个符号,一个数值(其中值中的每个数字位于0到9之间)以及一个缩放因子,用于指示分隔数字值的整数部分和小数部分的浮点小数点的位置。

+0

Ahem。为什么?这个答案完全正确,谢谢。 – Noldorin