除以零错误,我该如何解决这个问题?

时间:2008-10-01 22:55:03

标签: c# divide-by-zero

C#新手在这里,当下面的int'max'为0时我得到除零错误,我可以看出为什么会发生这种情况但是当max为0时我应该如何处理呢? position也是一个int。

    private void SetProgressBar(string text, int position, int max)
    {
        try
        {
            int percent = (100 * position) / max; //when max is 0 bug hits
            string txt = text + String.Format(". {0}%", percent);
            SetStatus(txt);
        }
        catch
        {
        }
    }

11 个答案:

答案 0 :(得分:16)

int percent = 0
if (max != 0) percent = (100*position) / max

答案 1 :(得分:9)

那么,这完全取决于你想要的行为。如果程序栏的最大值为零,它是否已满?它是空的吗?这是一个设计选择,当您选择时,只需测试max == 0并部署您的答案。

答案 2 :(得分:8)

  • 你可以抛出异常。
  • 您可以int percent = ( max > 0 ) ? (100 * position) / max : 0;
  • 您可以选择不执行任何操作,而不是将值分配给百分比。
  • 许多其他事情......

取决于你想要的东西。

答案 3 :(得分:3)

检查零。

if ( max == 0 ) {
    txt = "0%";
} else {
    // Do the other stuff....

答案 4 :(得分:2)

这不是C#问题,这是一个数学问题。除零是未定义的。有if语句检查max> 0然后只执行你的部门。

答案 5 :(得分:1)

转换你的

int percent = (100 * position) / max;

int percent;
if (max != 0)
    percent = (100 * position) / max;
else
    percent = 100; // or whatever fits your needs

答案 6 :(得分:0)

好吧,如果max为零,那么就没有进展了。尝试捕获调用此异常的异常。这可能是决定是否存在问题或进度条应设置为零还是100%的地方。

答案 7 :(得分:0)

我想根本问题是:即使调用max为'0'的函数也是有意义的吗?如果是,那么我会给它添加特殊处理,即:

if (max == 0) 
{
    //do special handling here
}
else
{
    //do normal code here
}

如果0没有意义,我会调查它的来源。

答案 8 :(得分:0)

您需要一个检查max == 0的保护条款。

private void SetProgressBar(string text, int position, int max)
{
    if(max == 0)
        return;
    int percent = (100 * position) / max; //when max is 0 bug hits
    string txt = text + String.Format(". {0}%", percent);
    SetStatus(txt);
}

您也可以处理“除以零”异常,如您的示例所示,但处理异常通常会更加昂贵,然后设置对已知错误值的检查。

答案 9 :(得分:0)

如果您使用它进行下载,您可能希望显示0%,因为我认为在这种情况下,当您还不知道文件大小时,max = = 0。

int percent = 0;
if (max != 0)
    ...;

如果您将其用于其他长期任务,我想假设100%

但是,因为位置永远不会介于0和-1之间,所以你可能想要放弃100 *

答案 10 :(得分:0)

您可以使用三元运算符。

int percent = max != 0 ? (100 * position) / max : 0;

这意味着当 max 不等于零时,执行计算。如果它等于 0,那么它会将百分比设置为 0。