处理浮点误差

时间:2019-05-28 17:07:36

标签: c# 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 个答案:

答案 0 :(得分:4)

我认为您应该只切换到十进制而不是使用浮点数,因为根据定义floating point numbers accurately represent only fractions that have a power of 2 in the denominator,而十进制没有这个特定问题。