比较双值

时间:2013-03-15 11:52:17

标签: c# asp.net

我有一个double我的动态得到的值,值为0.94289988675而且我得到另一个值为0.94289988777的双倍。我只需要比较这两个值。但它说它们不一样。我怎样才能比较这些值的前四位数。

代码

for (z = 0; z < something.Count(); z++)
{
    if (largest == Math.Round(0.94289988675 [z],4))
    {
        //proceed
    }
}

最大= 0.94289988675 0.94289988675 [z]来自0.94289988777。 z是。

它不会进入循环。请帮帮我。

2 个答案:

答案 0 :(得分:10)

  

我如何比较前四位

我假设你的意思是4位,而不是4位。

只需取差异的绝对值:

if (Math.Abs(largest - 0.94289988675) < 0.0001) 
{
    //proceed
}

对于浮点类型,平等是一个相当困难的概念,从不使用简单的==

答案 1 :(得分:7)

您永远不会测试浮点值是否相等。永远。在任何编程语言中。处理此问题的最常见方法是从另一个中减去一个,并将此差异与通常称为Epsilon的少数差异进行比较。在您的情况下,前四位数的0.001可能是合适的。如果两个数字的差异小于Epsilon值,则认为它们相等。

double x = ?;
double y = ?;
double epsilon = 0.001;

var difference = Math.Abs(x - y);

var isEqual = difference < espilon;

请注意,您应使用常量Double.Epsilon。这只是错误的命名,它是完全不相关的东西。