Установить значение любой ошибки деления с нулем - вычислить строковое выражение, используя C# - PullRequest
2 голосов
/ 19 апреля 2020

Я работаю над финансовым приложением, поэтому меня интересует точность, и мне нужно оценить выражение формулы следующим образом:

(200/{trans_alow}*100)+150

Итак, предположим, что значение {trans_alow} равно 0, уравнение будет быть похожим на:

(200/0*100)+150

Я использую NCal c lib, чтобы оценить выражение как следующее

return new Expression("(200/0*100)+150").Evaluate();

И, конечно, оно возвращает ∞ в качестве вывода.

Но мне нужно только деление, которое приводит к ошибке, будет Ноль, а выходной будет 0 + 150 = 150

Могу ли я решить эту проблему?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2020

Я считаю, что использование встроенной функции не подойдет для вашего случая. Так что, как я вижу, лучше подойдет для анализа вашего арифметического выражения c, после чего вы можете проверить деление на ноль и другие пользовательские случаи.

Проверьте эту ссылку здесь: https://www.geeksforgeeks.org/expression-evaluation/

0 голосов
/ 19 апреля 2020

Конечно. Сделайте следующее:

if (trans_alow == 0)
{
  return new Expression("0+150").Evaluate();
}
else 
{
  return new Expression($"(200/{trans_alow}*100)+150").Evaluate();
}

Также для такого простого выражения вам может не потребоваться NCalc:

var result = 150m;
if (trans_alow != 0)
{
  // `200 / trans_alow * 100` is the same as `20000 / trans_alow`
  result = checked(result + 20000m / trans_alow);
}
return result;

В этом примере используется тип данных десятичный , для финансовых расчетов . Кроме того, для проверки на переполнение используется selected .

...