http://blog.csdn.net/hunkcai/article/details/6125963
前言
表达式的计算是一个一般性的问题。在报表领域,经常会出现支持计算公式的需求。MS Office Excel中的函数计算就是一个很好的参考例子。
本文提供一个表达式引擎的设计方案,能够满足报表领域的复杂计算要求。
一个良好的表达式引擎应该支持基本的二元运算和函数调用,而且二元运算能够嵌套函数调用,函数调用也能够嵌套二元运算,比如:
例子1:=2>1&&((Num(1)+2*Num((Num(2)+2)*3/Num(2)))/2>0||2>1)&&0>1,执行结果:0
例子2:=Switch(Num(1),是, Num(0),否),执行结果:是
例子3:=Switch(20<10,1 ,20>=10, 20 + 20*0.1),执行结果:22
当然,实际的应用里,表达式中要支持变量的绑定,比如:
例子1(计算税后金额):=Fields!数量.Value * Fields!单价.Value*(1 + Fields!税率.Value / 100)
例子2(不同价格不同税后金额):=Fields!数量.Value*Fields!单价.Value*Switch(Fields!单 价.Value<100, 1.1, Fields!单价.Value<500, 1.08, Fields!单价.Value<800, 1.07)
至于常用的一元运算,能