1

我有一个双精度值,我动态获得,值为 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 是。

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

4

2 回答 2

10

我怎样才能比较到前四位

我假设您的意思是 4 位数字,而不是 4 位。

只需取差值的绝对值:

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

平等是浮点类型的一个非常困难的概念,永远不要使用简单的==

于 2013-03-15T11:57:44.007 回答
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。这只是一个糟糕的命名,它是完全不相关的东西。

于 2013-03-15T12:01:13.873 回答