Работа с неточностью с плавающей запятой - PullRequest
2 голосов
/ 28 мая 2019

С помощью regex я создал программу, которая решает математические выражения.Он прекрасно работает, за исключением таких выражений, как: (123.45*(678.90 / (-2.5+ 11.5)-(((80 -(19))) *33.25)) / 20) - (123.45*(678.90 / (-2.5+ 11.5)-(((80 -(19))) *33.25)) / 20) + (13 - 2)/ -(-11)".

Моя программа решает проблему, выполняя следующие шаги: enter image description here

Результат долженбыть точно 1 , но немного больше.Моя программа зацикливается, пока не будет единственного числа в правильном формате.Я думаю, я могу переписать регулярное выражение, чтобы оно принимало числа в научном формате, но все равно это вернуло бы неправильный ответ.Как мне с этим бороться?Моя программа использует следующую строку:

while (!Regex.IsMatch(expression, @"\A([+-]?[0-9]*(?:\.[0-9]*)?)\Z"))

1 Ответ

4 голосов
/ 28 мая 2019

Я думаю, вы должны просто переключиться на десятичные дроби вместо использования чисел с плавающей запятой, поскольку, по определению, числа с плавающей запятой точно представляют только дроби, имеющие степень 2 в знаменателе , тогда как десятичные дроби этого не имеют конкретная проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...