【问题标题】:C# double value returns NaN [duplicate]C# double 值返回 NaN [重复]
【发布时间】:2021-04-14 13:27:45
【问题描述】:

我这里有这段代码:

public double ProgressBar
{
    get
    {
        return ((double)Completed / Progress);
    }
}

但当两个值(已完成和进度)均为 0 时,它总是返回 NaN。

我也试过了:

public double ProgressBar
{
    get
    {
        return ((double)Completed / (double)Progress);
    }
}

同样的结果 NaN

我做错了什么?

【问题讨论】:

  • 哈哈,是的,@MitchWheat 说你可能除以 0。
  • 0 / 0 = NaN ... X / 0 = NaN
  • 返回(进度 == 0)? 0 : ((double)Completed / Progress);
  • @user979331 因为当除以零时得到 0?抱怨缺少 DivideByZeroException 是有道理的……但结果是要求为 0????
  • @MitchWheat 明确地说,如果 X 为零,则 X/0 为 NaN,否则为 +ve 或 -ve 无穷大。 (我意识到您的评论是假设 X 为零,但我只是想为其他读者澄清一下)

标签: c#


【解决方案1】:

不允许除以零,因此应避免。

根据docs

尝试将整数或Decimal 数字除以零会引发DivideByZeroException 异常。为防止出现异常,请确保整数或Decimal 值的除法运算中的分母不为零。

将浮点值除以零不会引发异常;根据 IEEE 754 算术规则,它会产生正无穷大、负无穷大或非数字 (NaN)。

因此,如果您希望结果为0.0 如果Progress0,那么您应该在代码中如此明确地表达。比如这样:

public double ProgressBar
{
    get
    {
        return Progress == 0 ? 0.0 : ((double)Completed / (double)Progress);
    }
}

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2017-06-09
    • 2013-08-19
    • 2018-03-11
    • 2018-01-07
    • 2015-10-25
    • 2014-02-11
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多