11

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
        {
        }
    }
4

11 に答える 11

17
int percent = 0
if (max != 0) percent = (100*position) / max
于 2008-10-01T22:57:08.363 に答える
9

まあ、それはあなたが望む行動に完全に依存します. プログラム バーの最大値がゼロの場合、それはいっぱいですか? 空ですか?これは設計上の選択です。選択したら、max == 0 をテストして、回答を展開します。

于 2008-10-01T22:57:30.393 に答える
9
  • 例外をスローできます。
  • できるよint percent = ( max > 0 ) ? (100 * position) / max : 0;
  • パーセントに値を割り当てる代わりに、何もしないことを選択できます。
  • 他にもいろいろ…

あなたが望むものに依存します。

于 2008-10-01T22:57:53.060 に答える
3

ゼロを確認します。

if ( max == 0 ) {
    txt = "0%";
} else {
    // Do the other stuff....
于 2008-10-01T22:57:25.837 に答える
2

これは C# の問題ではなく、数学の問題です。ゼロによる除算は未定義です。max > 0 かどうかをチェックする if ステートメントを用意し、次に除算のみを実行します。

于 2008-10-01T22:58:29.047 に答える
1

あなたの

int percent = (100 * position) / max;

の中へ

int percent;
if (max != 0)
    percent = (100 * position) / max;
else
    percent = 100; // or whatever fits your needs
于 2008-10-01T23:00:53.270 に答える
0

max が 0 の場合、進展はありません。これが呼び出された例外をキャッチしてみてください。問題があるかどうか、またはプログレス バーを 0 または 100% に設定する必要があるかどうかを判断するのは、おそらくここです。

于 2008-10-01T22:59:15.893 に答える
0

根本的な問題は次のとおりだと思います: max が '0' の場合にこの関数を呼び出すことさえ理にかなっていますか? はいの場合、特別な処理を追加します。つまり、次のようになります。

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

0 が意味をなさない場合は、それがどこから来ているのかを調査します。

于 2008-10-01T22:59:35.363 に答える
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);
}

サンプルが示したように、0 による除算の例外を処理することもできますが、通常、既知の不正な値のチェックを設定するよりも、例外を処理する方がコストがかかります。

于 2008-10-01T22:59:43.163 に答える
0

これをダウンロードに使用している場合は、ファイル サイズがまだわからない場合に最大 == 0 になると想定しているため、おそらく 0% を表示することをお勧めします。

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

これを他の長いタスクに使用している場合は、100% と仮定したいと思います

また、position が 0 から -1 の間になることはあり得ないため、おそらく 100 * を削除したいと思うでしょう。

于 2008-10-01T23:00:25.407 に答える
0

三項演算子を使用できます。

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

これは、max がゼロに等しくない場合に計算を実行することを意味します。0 の場合、パーセントを 0 に設定します。

于 2021-03-10T01:37:25.773 に答える