【问题标题】:Nice way to avoid DivideByZero exception避免 DivideByZero 异常的好方法
【发布时间】:2016-09-29 15:50:40
【问题描述】:

我正在尝试划分多个值,并且想知道检查其中一个值是否为 0 的最佳方法是什么。通常我使用类似的东西

var somevar = (somevalue1 != 0 || somevalue2 != 0)?somevalue1 / somevalue2:0;

我必须检查很多值,所以想知道是否有更好、更智能的方法。

【问题讨论】:

  • 您总是可以创建一个方法 - 然后您只需在一个地方进行检查。
  • 你不需要检查somevalue1是否为0,将0除以某物当然是合法的。 除以 0 不是。

标签: c#


【解决方案1】:

您只需要检查分母以防止被零除。

所以

var somevar = somevalue2 != 0 ? somevalue1 / somevalue2 : 0;

更好,假设 0 是一个很好的默认值。

【讨论】:

    【解决方案2】:

    有一种方法无需检查,也无需您进行异常处理。 这在数学上可能不是正确的方法,而且它会消耗资源,但只是为了提供信息:您总是可以使用浮点值,然后将它们切割成整数。

    “浮点算术溢出或除以零永远不会引发异常,因为浮点类型基于 IEEE 754,因此具有表示无穷大和 NaN(非数字)的规定。”(微软)

    因此,您可以在事后轻松检查您是否获得了 DivideByZero 无一例外(通过无限常数)。应该更具可读性。

    // This will return "true".
    bool isIninity = Double.IsInfinity(3.0 / 0) ?  "true" : "false");
    

    【讨论】:

    • 希望您不介意,我编辑了您的帖子以通过删除“true”和“false”字符串进行编译。我也可以删除双引号。
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多