尝试在c#中捕获除以零错误

时间:2011-11-11 12:21:29

标签: c# error-handling

如何在c#中尝试catch,以便在try catch

中执行sql查询

有时count的值为0,并且它会将错误除以零错误。 因此当它抛出除以零错误时,我必须执行一个sql语句来删除该语句,并且循环必须继续获取下一条记录的值。我该怎么做。

double value = (read * 100 / count);

8 个答案:

答案 0 :(得分:28)

为什么在只测试count的值是否等于0时执行try / catch:

if (count != 0)
{ 
    // perform the division only if count is different than 0,
    // otherwise we know that it will throw an exception 
    // so why even attempting it?
    double value = (read * 100 / count);
}

答案 1 :(得分:3)

这是条件逻辑,不应该由异常处理。在操作之前检查count的值并相应地执行sql语句。

答案 2 :(得分:3)

你可以这样试试..

这是示例

namespace nsDivZero
{
    using System;
    public class DivZero
    {
        static public void Main ()
        {
            // Set an integer equal to 0
            int IntVal1 = 0;
            // and another not equal to zero
            int IntVal2 = 57;
            try
            {
                Console.WriteLine ("{0} / {1} = {2}", IntVal2, IntVal1, IntResult (IntVal2, IntVal1) / IntResult (IntVal2, IntVal1));
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine (e.Message);
            }
            // Set a double equal to 0
            double dVal1 = 0.0;
            double dVal2 = 57.3;
            try
            {
                Console.WriteLine ("{0} / {1} = {2}", dVal2, dVal1, DoubleResult (dVal2, dVal1));
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine (e.Message);
            }
        }
        static public int IntResult (int num, int denom)
        {
            return (num / denom);
        }
        static public double DoubleResult (double num, double denom)
        {
            return (num / denom);
        }
    }
}

答案 3 :(得分:1)

我更喜欢将double.Epsilon添加到分隔符,而不是使用if语句或try / catch语句。如果使用浮动,您也可以使用float.Epsilon。它代表大于零的最小可能数,它不会真正影响您的结果。我在生成报告和图表时使用它

double value = (read * 100 / (count + double.Epsilon));

答案 4 :(得分:0)

在这种情况下,不要使用try catch,而不是检查计数是否为0更好。

if (count == 0)
{
    DeleteStatement();
    continue;
}

double value = (read * 100 / count);

答案 5 :(得分:0)

这种类型的异常在Java中称为RuntimeException(我知道这是C#),这意味着它应该首先被阻止,而不是捕获。只测试计数不是0。

答案 6 :(得分:0)

if (count > 0)//as suggested by sasjaq { double value = (read * 100 / count); }

似乎是一种很好的方法。使用try catch可能会显着降低性能......

答案 7 :(得分:-1)

如果您传递的值很可能是0,并且正在对其进行除法,则可以通过执行以下操作来解决该问题:

int x = 0; 

int z = 1300; 

如果除以0,您将传递无穷大的值,否则您将根据分度传递您想要的正确量!

int result = x == 0 ? 99999 : x / z; 

Console.WriteLine(result);