1

分母の一部がゼロになることもある除算を含む式があります。ただし、そのような場合は、例外をスローするのではなく、その除算を1にする必要があります。これを行うための簡単な方法はありますか、それとも、この望ましい効果を得るために、ifステートメントを実行して式への入力を変更する必要がありますか?

4

8 に答える 8

7

ここで動機を問う必要がありますが、必要に応じて機能を作成してください。

double SafeDiv(double num, double denom) {
   if(denom == 0) {
      return 1;
   }
   return num/denom;
}
于 2011-09-21T14:04:37.960 に答える
1

除算する関数を書くことができます。拡張機能のサンプルアイデアは次のとおりです。

public static float DivideBy(this float toBeDivided, float divideBy){
    try
    {
    return toBeDivided / divideBy;
    }
    catch(DivideByZeroException)
    {
    return 1.0;
    }
}
于 2011-09-21T14:04:32.433 に答える
1

組み込み型の除算演算子を再定義することはできないため、関数に除算のバージョンを実装する必要があります。

于 2011-09-21T14:06:00.347 に答える
1

このようなもの?

public T divide<T>(T dividend, T divisor) {
    return ((divisor == 0) ? (1) : (dividend / divisor));
}

多分...

public T divide<T>(T dividend, T divisor) {
    try {
        return dividend / divisor;
    }
    catch (DivideByZeroException) {
        return 1;
    }
}

個人的には、除数が0になる場合があることを知っている場合、その場合は「例外的」とは見なさないため、最初のアプローチを使用します(非常に便利な場合は、手動でインライン化することもできます)。

そうは言っても、私はChris Marasti-Georgが書いたことに同意し、これを行う動機に疑問を投げかけます。

于 2011-09-21T14:06:34.163 に答える
0

いいえ。あなたの質問を理解した場合は、除算操作の動作を変更して、スローではなく1を返すようにします。それをする方法はありません。

于 2011-09-21T14:07:51.637 に答える
0

ゼロに等しくない場合は、最初に分母を確認して操作を実行します

public double ReturnValueFunction(int denominator, int numerator)
{
    try
    {
       if(denominator!=0)
       {
             return  numerator/ denominator; 

         /* or your code */
        }

  else
   {
            /*your code*/
        return someDecimalnumber;
   }
}
    catch(Exception ex)
    {

    }
}
于 2011-09-21T14:11:35.860 に答える
0

除数または除数のいずれかがdoubleで、除数が0(または0.0)の場合、結果は正または負の無限大になります。スローせずに後続のすべての操作を通過し、代わりに、他のオペランドに応じて±InfinityまたはNaNを返します。後で、最終的な値が何か意味があるかどうかを確認できます。

何らかの理由でゼロ除算時に1を返す必要がある場合は、いくつかのオプションがあります。

  • カスタムジェネリック関数
  • オーバーロードされた演算子を使用したカスタムタイプ
  • 除算の前に除数が0であるかどうかを確認します

私の知る限り、これは通常行われることではないので、なぜそうするのかを考え直すかもしれません。

于 2011-09-21T14:18:07.840 に答える
0

多分あなたはこれを試すことができます

    double res = a / (b == 0 ? a : b);
于 2011-09-21T17:41:56.873 に答える