1

C# で奇妙な問題に直面しています。そこでは、 で割ることができる数学的な文字列式を評価する必要があります0。次に例を示します。

string expression = GetUserInput(); // Example: "(x + y) / z", where z may equal to 0

現在、この式を評価するためにNCalcライブラリを使用しています。これは、現在の式の引数が であるDivideByZeroException場合に をスローします。z0

私は次のようにして例外をキャッチしようとしました:

try {
    string formula = GetUserInput();
    Expression exp = new Expression(formula);

    // ...

    exp.Evaluate(); // Throws a DivideByZeroException

} catch (DivideByZeroException e) {
    //ignored
}

ただし、この式を (さまざまな変数を使用して) 時間効率の良い方法で 6000 回以上評価する必要があるため、毎回例外をキャッチすると、アプリケーションの速度が大幅に低下します。

そのような式が複数あり、それぞれがユーザーによって入力されます。特定の式がゼロで除算しようとしているかどうかはわかりません。

C# の数式を "安全な" 方法で評価する方法はありますか? 例外をスローすることなく、除算を試みると0静的な数値 (または無限大) が返されますか?0

4

2 に答える 2

3

値を浮動小数点にしてみてください。

整数または 10 進数をゼロで除算しようとすると、DivideByZeroException 例外がスローされます。例外を回避するには、整数値または Decimal 値を使用した除算演算の分母がゼロ以外であることを確認してください。浮動小数点値をゼロで除算しても、例外はスローされません。IEEE 754 演算の規則に従って、正の無限大、負の無限大、または非数 (NaN) になります。次の例では、整数除算ではなく浮動小数点除算を使用しているため、この操作では DivideByZeroException 例外はスローされません。

https://msdn.microsoft.com/en-us/library/system.dividebyzeroexception.aspx

于 2016-09-08T04:15:30.040 に答える
0

z を評価します。z が > 0 の場合は操作を実行し、そうでない場合は次の評価に進みます。

于 2016-09-08T03:42:23.973 に答える