我有一个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是。
它不会进入循环。请帮帮我。
答案 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
。这只是错误的命名,它是完全不相关的东西。