【发布时间】:2011-05-09 17:13:35
【问题描述】:
我有 C++ 的背景,我知道你无法准确地比较浮点数的相等性。对于 C#,我只是假设相同的策略适用于十进制值或任何浮点值。
基本上,我有两个十进制值,如果它们不相等,我需要执行一些操作。例如:
decimal value1, value2;
// Assume value1 and value2 are set somewhere to valid values.
if( value1 != value2 )
{
// Do something
}
如果这不能按预期工作,我愿意接受一个解决方案,它可以用误差幅度进行相等比较,比如 .00001 或类似的东西。这个问题的推荐解决方案是什么?
【问题讨论】:
-
它与双精度数而不是十进制数不完全相同,但请查看stackoverflow.com/questions/485175/…
-
@Mark:好点。撤回。
-
您发布的代码是比较两位小数的正确方法。如果您想比较两位小数的误差范围,您只需执行
if (Math.Abs(value2 - value1) < 0.00001) { ... }。 -
当您说“十进制”时,您是在谈论 the
decimaltype useful for financial and monetary calculations 还是使用“十进制”作为各种浮点格式的总称,包括double、float、和decimal(如上链接)? -
我想澄清我在原始帖子中对“十进制”的使用。基本上,我指的是实际类型“十进制”(实际关键字)。我不太了解十进制类型的底层数据是什么样的,我只是假设它们是浮点值,而对于小数类型,它们永远不会完全相同(就像 C++ 中的浮点数和双精度数一样)。
标签: c# comparison floating-point