嗨,我想知道是否有任何已知的方法可以消除数学公式中不必要的括号。我问这个问题的原因是我必须尽量减少这样的公式长度
if((-if(([V].[6432])=0;0;(([V].[6432])-([V].[6445]))*(((([V].[6443]))/1000*([V].[6448])
+(([V].[6443]))*([V].[6449])+([V].[6450]))*(1-([V].[6446])))))=0;([V].[6428])*
((((([V].[6443]))/1000*([V].[6445])*([V].[6448])+(([V].[6443]))*([V].[6445])*
([V].[6449])+([V].[6445])*([V].[6450])))*(1-([V].[6446])));
它基本上是 sql select 语句的一部分。它不能超过 255 个字符,而且我不能修改产生这个公式的代码(基本上是一个黑盒子;))正如你所看到的,许多括号是无用的。更不用说以下事实:
((a) * (b)) + (c) = a * b + c
所以我想保持操作括号,乘/除,加/减的顺序。
我在 VB 中工作,但任何语言的解决方案都可以。
编辑
我发现了一个相反的问题(在表达式中添加括号)问题。
我真的认为这可以在没有大量解析的情况下完成。但似乎某些解析器将遍历表达式并将其保存在表达式树中是不可避免的。