guojianbin / ToolGood.Algorithm

支持四则运算、Excel函数,并支持自定义参数。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ToolGood.Algorithm

ToolGood.Algorithm支持四则运算Excel函数,并支持自定义参数

快速上手

    AlgorithmEngine engine = new AlgorithmEngine();
    double a=0.0;
    if (engine.Parse("1+2")) {
        a = (double)engine.Evaluate();
    }
    var c = engine.TryEvaluate("2+3", 0);
    var d = engine.TryEvaluate("count({1,2,3,4})", 0);//{}代表数组,返回:4
    var s = engine.TryEvaluate("'aa'&'bb'", ""); //字符串连接,返回:aabb
    var r = engine.TryEvaluate("(1=1)*9+2", 0); //返回:11
    var d = engine.TryEvaluate("'2016-1-1'+1", DateTime.MinValue); //返回日期:2016-1-2
    var t = engine.TryEvaluate("'2016-1-1'+9*'1:0'", DateTime.MinValue);//返回日期:2016-1-1 9:0

支持常量pi,e,true,false

自定义参数

    //定义圆柱信息
    public class Cylinder : AlgorithmEngine
    {
        private int _radius;
        private int _height;
        public Cylinder(int radius, int height)
        {
            _radius = radius;
            _height = height;
        }

        protected override Operand GetParameter(Operand curOpd)
        {
            if (curOpd.Parameter == "[半径]") {
                return new Operand(OperandType.NUMBER, _radius);
            }
            if (curOpd.Parameter == "[直径]") {
                return new Operand(OperandType.NUMBER, _radius * 2);
            }
            if (curOpd.Parameter == "[高]") {
                return new Operand(OperandType.NUMBER, _height);
            }
            return base.GetParameter(curOpd);
        }
    }
    //调用方法
    Cylinder c = new Cylinder(3, 10);
    c.TryEvaluate("[半径]*[半径]*pi()", 0.0);      //圆底面积
    c.TryEvaluate("[直径]*pi()", 0.0);            //圆的长
    c.TryEvaluate("[半径]*[半径]*pi()*[高]", 0.0); //圆的体积

Excel函数

函数:逻辑函数数学与三角函数文本函数统计函数日期与时间函数

注:函数名不分大小写,带方括号的参数可省略,示例的返回值,可能为近似值。

逻辑函数

函数名说明示例
IFif(测试条件,真值,[假值])
执行真假值判断,根据逻辑计算的真假值,返回不同结果。
if(1=1,1,2)
>>1
IFERRORifError(测试条件,真值,[假值])
如果公式计算出错误则返回您指定的值;否则返回公式结果。
iferror(1/0,1,2)
>>1
IFNUMBERifNumber(测试条件,真值,[假值])
指定要执行的逻辑检测
ifnumber(4,1,2)
>>1
IFTEXTifText(测试条件,真值,[假值])
指定要执行的逻辑检测
iftext('a',1,2)
>>1
ISNUMBERisNumber(值)
判断是否数字,返回 TRUE 或 FALSE
ISNUMBER(1)
>>true
ISTEXTisText(值)
判断是否文字,返回 TRUE 或 FALSE
istext('1')
>>true
ANDand(逻辑值1,...)
如果所有参数均为TRUE,则返回TRUE
and(1,2=2)
>>true
ORor(逻辑值1,...)
如果任一参数为TRUE,则返回TRUE
or(1,2=3)
>>true
NOTnot(逻辑值)
对参数的逻辑值求反
NOT(true())
>>false
TRUEtrue()
返回逻辑值TRUE
true()
>>true
FALSEfalse()
返回逻辑值FALSE
false()
>>false

数学与三角函数

分类函数名说明示例






PIpi()
返回 PI 值
pi()
>>3.141592654
absabs(数字)
返回数字的绝对值
abs(-1)
>>1
QUOTIENTquotient(除数,被除数)
返回商的整数部分,该函数可用于舍掉商的小数部分。
QUOTIENT(7,3)
>>2
modmod(除数,被除数)
返回两数相除的余数
MOD(7,3)
>>1
SIGNsign(数字)
返回数字的符号。当数字为正数时返回 1,为零时返回 0,为负数时返回 -1。
SIGN(-9)
>>-1
SQRTsqrt(数字)
返回正平方根
SQRT(9)
>>3
TRUNCtrunc(数字)
将数字截尾取整
TRUNC(9.222)
>>9
intint(数字)
将数字向下舍入到最接近的整数。
int(9.222)
>>9
gcdgcd(数字1,...)
返回最大公约数
GCD(3,5,7)
>>1
LCMlcm(数字1,...)
返回整数参数的最小公倍数
LCM(3,5,7)
>>105
combincombin(总数,排列数)
计算从给定数目的对象集合中提取若干对象的组合数
combin(10,2)
>>45
PERMUTpermut(总数,排列数)
返回从给定数目的对象集合中选取的若干对象的排列数
PERMUT(10,2)
>>990






degreesdegrees(弧度)
将弧度转换为度
degrees(pi())
>>180
RADIANSradians(度)
将度转换为弧度
RADIANS(180)
>>3.141592654
coscos(弧度)
返回数字的余弦值
cos(1)
>>0.540302305868
coshcosh(弧度)
返回数字的双曲余弦值
cosh(1)
>>1.54308063481
SINsin(弧度)
返回给定角度的正弦值
sin(1)
>>0.84147098480
SINHsinh(弧度)
返回数字的双曲正弦值
sinh(1)
>>1.1752011936
TANtan(弧度)
返回数字的正切值
tan(1)
>>1.55740772465
TANHtanh(弧度)
返回数字的双曲正切值
tanh(1)
>>0.761594155955
acosacos(数值)
返回数字的反余弦值
acos(0.5)
>>1.04719755119
acoshacosh(数值)
返回数字的反双曲余弦值
acosh(1.5)
>>0.962423650119
asinasin(数值)
返回数字的反正弦值
asin(0.5)
>>0.523598775598
asinhasinh(数值)
返回数字的反双曲正弦值。
asinh(1.5)
>>1.1947632172
atanatan(数值)
返回数字的反正切值
atan(1)
>>0.785398163397
atanhatanh(数值)
返回参数的反双曲正切值
atanh(1)
>>0.549306144334
atan2atan2(数值)
从X和Y坐标返回反正切
atan2(1,2)
>>1.10714871779






ROUNDround(数值,小数位数)
返回某个数字按指定位数取整后的数字。
ROUND(4.333,2)
>>4.33
ROUNDDOWNroundDown(数值,小数位数)
靠近零值,向下(绝对值减小的方向)舍入数字。
ROUNDDOWN(4.333,2)
>>4.33
ROUNDUProundUp(数值,小数位数)
远离零值,向上(绝对值增长的方向)舍入数字。
ROUNDUP(4.333,2)
>>4.34
CEILINGceiling(数值,舍入基数)
向上舍入(沿绝对值增大的方向)为最接近的 舍入基数 的倍数。
CEILING(4.333,0.1)
>>4.4
floorfloor(数值,舍入基数)
向下舍入,使其等于最接近的 Significance 的倍数。
FLOOR(4.333,0.1)
>>4.3
eveneven(数值)
返回沿绝对值增大方向取整后最接近的偶数。
EVEN(3)
>>4
ODDodd(数值)
将数字向上舍入为最接近的奇型整数
ODD(3.1)
>>5
MROUNDmround(数值,舍入基数)
返回一个舍入到所需倍数的数字
MROUND(13,5)
>>15




RANDrand()
返回 0 到 1 之间的随机数
RAND()
>>0.2
RANDBETWEENrandBetween(最小整数,最大整数)
返回大于等于指定的最小值,小于指定最大值之间的一个随机整数。
RANDBETWEEN(2,44)
>>9


/





/



factfact(数值)
返回数的阶乘,一个数的阶乘等于 1*2*3*…* 该数。
FACT(3)
>>6
factdoublefactDouble(数值)
返回数字的双倍阶乘
FACTDOUBLE(10)
>>3840
POWERpower(数值,幂)
返回数的乘幂结果
POWER(10,2)
>>100
expexp(幂)
返回e的指定数乘幂
exp(2)
>>7.389056099
lnln(数值)
返回数字的自然对数
LN(4)
>>1.386294361
loglog(数值,[底数])
返回数字的常用对数,如省略底数,默认为10
LOG(100,10)
>>2
LOG10log10(数值)
返回数字的10对数
LOG10(100)
>>2
MULTINOMIALmultinomial(数值1,...)
返回参数和的阶乘与各参数阶乘乘积的比值
MULTINOMIAL(1,2,3)
>>60
PRODUCTproduct(数值1,...)
将所有以参数形式给出的数字相乘,并返回乘积值。
PRODUCT(1,2,3,4)
>>24
SQRTPIsqrtPi(数值)
返回某数与 PI 的乘积的平方根
SQRTPI(3)
>>3.069980124
SUMSQsumQq(数值,...)
返回参数的平方和
SUMSQ(1,2)
>>5

文本函数

函数名说明示例
ASCasc(字符串)
将字符串内的全角英文字母更改为半角字符
asc('abcABC123')
>>abcABC123
JIS / WIDECHARjis(字符串)
将字符串中的半角英文字符更改为全角字符
jis('abcABC123')
>>abcABC123
CHARjis(数值)
返回由代码数字指定的字符
char(49)
>>1
CLEANclean(字符串)
删除文本中所有打印不出的字符
clean('\r112\t')
>>112
CODEcode(字符串)
返回文本字符串中第一个字符的数字代码
CODE("1")
>>49
CONCATENATEconcatenate(字符串1,...)
将若干文本项合并到一个文本项中
CONCATENATE('tt','11')
>>tt11
EXACTexact(字符串1,字符串2)
检查两个文本值是否完全相同
EXACT("11","22")
>>false
FINDfind(要查找的字符串,被查找的字符串,[开始位置])
在一文本值内查找另一文本值(区分大小写)
FIND("11","12221122")
>>5
FIXEDfixed(数值,[小数位数],[有无逗号分隔符])
将数字设置为具有固定小数位的文本格式
FIXED(4567.89,1)
>>4,567.9
LEFTleft(字符串,[字符个数])
返回文本值最左边的字符
LEFT('123222',3)
>>123
LENlen(字符串)
返回文本字符串中的字符个数
LEN('123222')
>>6
LOWERlower(字符串)
将文本转换为小写形式
LOWER('ABC')
>>abc
MIDmid(字符串,开始位置,字符个数)
从文本字符串中的指定位置起返回特定个数的字符
MID('ABCDEF',2,3)
>>BCD
PROPERproper(字符串)
将文本值中每一个单词的首字母设置为大写
PROPER('abc abc')
>>Abc Abc
REPLACEreplace(原字符串,开始位置,字符个数,新字符串)
替换文本内的字符
REPLACE("abccd",2,3,"2")
>>a2d
REPTrept(字符串,重复次数)
按给定次数重复文本
REPT("q",3)
>>qqq
RIGHTright(字符串,[字符个数])
返回文本值最右边的字符
RIGHT("123q",3)
>>23q
RMBrmb(数值)
将数字转换为大写数字文本
rmb(12.3)
>>壹拾贰元叁角
SEARCHsearch(要找的字符串,被查找的字符串,[开始位置])
在一文本值中查找另一文本值(不区分大小写)
SEARCH("aa","abbAaddd")
>>4
SUBSTITUTEsubstitute(字符串,原字符串,新字符串,[替换序号])
在文本字符串中以新文本替换旧文本
SUBSTITUTE("ababcc","ab","12")
>>1212cc
Tt(数值)
将参数转换为文本
T('123')
>>123
TEXTtext(数值,数值格式)
设置数字的格式并将数字转换为文本
TEXT(123,"0.00")
>>123.00
TRIMtrim(字符串)
删除文本中的空格
TRIM(" 123 123 ")
>>123 123
UPPERupper(字符串)
将文本转换为大写形式
UPPER("abc")
>>ABC
VALUEvalue(字符串)
将文本参数转换为数字
VALUE("123")
>>123

日期与时间函数

函数名说明示例
DATEVALUEdateValue(字符串)
将文本格式的日期转换为序列号
DATEVALUE("2017-01-02")
>>2017-01-02
TIMEVALUEtimeValue(字符串)
将文本格式的时间转换为序列号
TIMEVALUE("12:12:12")
>>12:12:12
DATEdate(年,月,日,[时],[分],[秒])
返回特定日期的序列号
DATE(2016,1,1)
>>2016-01-01
TIMEtime(时,分,秒)
返回特定时间的序列号
TIME(12,13,14)
>>12:13:14
NOWnow()
返回当前日期和时间的序列号
NOW()
>>2017-01-07 11:00:00
TODAYtoday()
返回今天日期的序列号
TODAY()
>>2017-01-07
YEARyear(日期)
将序列号转换为年
YEAR(NOW())
>>2017
MONTHmonth(日期)
将序列号转换为月
MONTH(NOW())
>>1
DAYday(日期)
将序列号转换为月份中的日
DAY(NOW())
>>7
HOURhour(日期)
将序列号转换为小时
HOUR(NOW())
>>11
MINUTEminute(日期)
将序列号转换为分钟
MINUTE(NOW())
>>12
SECONDsecond(日期)
将序列号转换为秒
SECOND(NOW())
>>34
WEEKDAYsecond(日期)
将序列号转换为星期几
WEEKDAY(date(2017,1,7))
>>7
DATEDIFdateDif(开始日期,结束日期,类型Y/M/D/YD/MD/YM)
返回两个日期之间的相隔天数
DATEDIF("1975-1-30","2017-1-7","Y")
>>41
DAYS360days360(开始日期,结束日期,[选项0/1])
以一年 360 天为基准计算两个日期间的天数
DAYS360('1975-1-30','2017-1-7')
>>15097
EDATEeDate(开始日期,月数)
返回用于表示开始日期之前或之后月数的日期的序列号
EDATE("2012-1-31",32)
>>2014-09-30
EOMONTHeoMonth(开始日期,月数)
返回指定月数之前或之后的月份的最后一天的序列号
EOMONTH("2012-2-1",32)
>>2014-10-31
NETWORKDAYSnetWorkdays(开始日期,结束日期,[假日])
返回两个日期之间的全部工作日数
NETWORKDAYS("2012-1-1","2013-1-1")
>>262
WORKDAYworkday(开始日期,天数,[假日])
返回指定的若干个工作日之前或之后的日期的序列号
WORKDAY("2012-1-2",145)
>>2012-07-23
WEEKNUMweekNum(日期,[类型:1/2])
将序列号转换为一年中相应的周数
WEEKNUM("2016-1-3")
>>2

统计函数

函数名说明示例
MAXmax(数值)
返回参数列表中的最大值
max(1,2,3,4,2,2,1,4)
>>4
MEDIANmedian(数值)
返回给定数字的中值
MEDIAN(1,2,3,4,2,2,1,4)
>>2
MINmin(数值)
返回参数列表中的最小值
MIN(1,2,3,4,2,2,1,4)
>>1
QUARTILEquartile(数值,四分位:0-4)
返回数据集的四分位数
QUARTILE({1,2,3,4,2,2,1,4},0)
>>1
MODEmode(数值1,...)
返回在数组中出现频率最多的数值
MODE(1,2,3,4,2,2,1,4)
>>2
LARGElarge(数组,K)
返回数据集中第 k 个最大值
LARGE({1,2,3,4,2,2,1,4},3)
>>3
SMALLsmall(数值,K)
返回数据集中第 k 个最小值
SMALL({1,2,3,4,2,2,1,4},3)
>>2
PERCENTILEpercentile(数值,K)
返回区域中的第 k 个百分位值
PERCENTILE({1,2,3,4,2,2,1,4},0.4)
>>2
PERCENTRANKpercentRank(数值,K)
返回数据集中值的百分比排位
PERCENTRANK({1,2,3,4,2,2,1,4},3)
>>0.714
AVERAGEaverage(数值1,...)
返回参数的平均值
AVERAGE(1,2,3,4,2,2,1,4)
>>2.375
AVERAGEIFaverageIf(数值1,...)
返回参数的平均值
AVERAGEIF({1,2,3,4,2,2,1,4},'>1')
>>2.833333333
GEOMEANgeoMean(数值1,...)
返回正数数组或区域的几何平均值
GEOMEAN(1,2,3,4)
>>2.213363839
HARMEANharMean(数值1,...)
返回数据集合的调和平均值
HARMEAN(1,2,3,4)
>>1.92
COUNTcount(数值1,...)
计算参数列表中数字的个数
COUNT(1,2,3,4,2,2,1,4)
>>8
COUNTIFcountIf(数值1,...)
计算参数列表中数字的个数
COUNTIF({1,2,3,4,2,2,1,4},'>1')
>>6
SUMsum(数值1,...)
返回所有数字之和。
SUM(1,2,3,4)
>>10
SUMIFsumIf(数值1,...)
返回所有数字之和
SUMIF({1,2,3,4,2,2,1,4},'>1')
>>17
AVEDEVaveDev(数值1,...)
返回数据点与其平均值的绝对偏差的平均值
AVEDEV(1,2,3,4,2,2,1,4)
>>0.96875
STDEVstDev(数值1,...)
基于样本估算标准偏差
STDEV(1,2,3,4,2,2,1,4)
>>1.1877349391654208
STDEVPstDevp(数值1,...)
计算基于整个样本总体的标准偏差
STDEVP(1,2,3,4,2,2,1,4)
>>1.1110243021644486
DEVSQdevSq(数值1,...)
返回偏差的平方和
DEVSQ(1,2,3,4,2,2,1,4)
>>9.875
VARvar(数值1,...)
基于样本估算方差
VAR(1,2,3,4,2,2,1,4)
>>1.4107142857142858
VARPvarp(数值1,...)
基于整个样本总体计算方差
VARP(1,2,3,4,2,2,1,4)
>>1.234375
NORMDISTnormDist(数值,算术平均值,标准偏差,返回类型:0/1)
返回正态累积分布
NORMDIST(3,8,4,1)
>>0.105649774
NORMINVnormInv(分布概率,算术平均值,标准偏差)
返回反正态累积分布
NORMINV(0.8,8,3)
>>10.5248637
NormSDistnormSDist(数值)
返回标准正态累积分布函数,该分布的平均值为 0,标准偏差为 1。
NORMSDIST(1)
>>0.841344746
NORMSINVnormInv(数值)
返回反标准正态累积分布
NORMSINV(0.3)
>>-0.524400513
BETADISTbetaDist(数值,分布参数α,分布参数β)
返回 Beta 累积分布函数
BETADIST(0.5,11,22)
>>0.97494877
BETAINVbetaInv(数值,分布参数α,分布参数β)
返回指定 Beta 分布的累积分布函数的反函数
BETAINV(0.5,23,45)
>>0.336640759
BINOMDISTbinomDist(试验成功次数,试验次数,成功概率,返回类型:0/1)
返回一元二项式分布概率
BINOMDIST(12,45,0.5,0)
>>0.000817409
EXPONDISTexponDist(函数值,参数值,返回类型:0/1)
返回指数分布
EXPONDIST(3,1,0)
>>0.049787068
FDISTfDist(数值X,分子自由度,分母自由度)
返回 F 概率分布
FDIST(0.4,2,3)
>>0.701465776
FINVfInv(分布概率,分子自由度,分母自由度)
返回 F 概率分布的反函数
FINV(0.7,2,3)
>>0.402651432
FISHERfisher(数值)
返回点 x 的 Fisher 变换。该变换生成一个正态分布而非偏斜的函数
FISHER(0.68)
>>0.8291140383
FISHERINVfisherInv(数值)
返回 Fisher 变换的反函数值。
FISHERINV(0.6)
>>0.537049567
GAMMADISTgammaDist(数值,分布参数α,分布参数β,返回类型:0/1)
返回 γ 分布
GAMMADIST(0.5,3,4,0)
>>0.001723627
GAMMAINVgammaInv(分布概率,分布参数α,分布参数β)
返回 γ 累积分布函数的反函数
GAMMAINV(0.2,3,4)
>>6.140176811
GAMMALNgammaLn(数值)
返回 γ 累积分布函数的反函数
GAMMALN(4)
>>1.791759469
HYPGEOMDISThypgeomDist(样本成功次数,样本容量,样本总体成功次数,样本总体容量)
返回超几何分布
HYPGEOMDIST(23,45,45,100)
>>0.08715016
LOGINVlogInv(分布概率,算法平均数,标准偏差)
返回 x 的对数累积分布函数的反函数
LOGINV(0.1,45,33)
>>15.01122624
LognormDistlognormDist(数值,算法平均数,标准偏差)
返回反对数正态分布
LOGNORMDIST(15,23,45)
>>0.326019201
NEGBINOMDISTnegbinomDist(失败次数,成功极限次数,成功概率)
返回负二项式分布
NEGBINOMDIST(23,45,0.7)
>>0.053463314
POISSONpoisson(数值,算法平均数,返回类型:0/1)
返回 Poisson 分布
POISSON(23,23,0)
>>0.082884384
TDISTtDist(数值,自由度,返回类型:1/2)
返回学生的 t 分布
TDIST(1.2,24,1)
>>0.120925677
TINVtDist(分布概率,自由度)
返回学生的 t 分布的反分布
TINV(0.12,23)
>>1.614756561
WEIBULLweibull(数值,分布参数α,分布参数β,返回类型:0/1)
返回 Weibull 分布
WEIBULL(1,2,3,1)
>>0.105160683

About

支持四则运算、Excel函数,并支持自定义参数。

License:Apache License 2.0


Languages

Language:C# 100.0%