如何去掉数学表达式中不必要的括号

Paw*_*wel 5 algorithm math expression

您好,我想知道是否有任何已知的方法可以消除数学公式中不必要的括号。我问这个问题的原因是我必须最小化这样的公式长度

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])));
Run Code Online (Sandbox Code Playgroud)

它基本上是 sql select 语句的一部分。它不能超过 255 个字符,而且我无法修改生成此公式的代码(基本上是一个黑盒子;))如您所见,许多括号都是无用的。更不用说以下事实:

((a) * (b)) + (c) = a * b + c
Run Code Online (Sandbox Code Playgroud)

所以我想保持括号、乘/除、加/减的运算顺序。

我用 VB 工作,但任何语言的解决方案都可以。

编辑

我发现了一个相反的问题(在表达式中添加括号)问题

我真的认为这可以在不进行大量解析的情况下完成。但似乎某些解析器将遍历表达式并将其保存在表达式树中是不可避免的。

Kei*_*ith 2

你可以去掉最简单的情况:

([V].[6432]) and (([V].[6443]))
Run Code Online (Sandbox Code Playgroud)

成为

v.[6432]
Run Code Online (Sandbox Code Playgroud)

您不需要在表名称或其别名周围使用 []。

如果您可以为列添加别名,则可以进一步缩短它:

select v.[6432] as a, v.[6443] as b, ....
Run Code Online (Sandbox Code Playgroud)

或者甚至将所有正在查询的表放入一个子查询中 - 那么您就不需要表前缀:

if((-if(a=0;0;(a-b)*((c/1000*d
+c*e+f)*(1-g))))=0;h*
(((c/1000*b*d+c*b*
e+b*f))*(1-g));

select [V].[6432] as a, [V].[6445] as b, [V].[6443] as c, [V].[6448] as d, 
    [V].[6449] as e, [V].[6450] as f,[V].[6446] as g, [V].[6428] as h ...
Run Code Online (Sandbox Code Playgroud)

显然,这只是一些伪代码,但它应该可以帮助您简化完整的语句