如何确定一个双精度浮点数是否为零的最佳方法

6
有关确定double类型数值是否为零的建议吗?
4个回答

6

您需要设置一个与您正在解决的问题兼容的epsilon。然后,您可以使用类似以下的内容:

bool DoubleEquals(double value1, double value2)
{
    return Math.Abs(value1 - value2) < epsilon;
}

编辑
既然您想知道如何确定一个双精度浮点数是否为零,您可以使用以下函数:

if (!DoubleEquals(value, 0)) { /* do your not zero things */ }

我认为这种方法更好,因为它更具通用性。


3

您好,这取决于您正在进行的计算类型。有时会得到一个非常接近0但不完全为0的非常小的数字。

我通常会这样做:

if (Math.Abs(MyNumber) < 1e-10)

希望这有所帮助。

糟糕,我想1e-10是我的C++在说话。就像Gunner所说的那样,C#应该是Math.Pow(1,-10)。 - Leon

0
if ( Math.Abs(doubleNumber) > Math.Pow(1,-9) ) //doubleNumber not zero.

0

这已经足够检查双精度浮点数是否为零了

        double d = 0.00000005;
        bool l =  d.Equals(0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接