Coder Social home page Coder Social logo

toolgood / toolgood.algorithm Goto Github PK

View Code? Open in Web Editor NEW
104.0 15.0 35.0 48.51 MB

ToolGood.Algorithm is a powerful, lightweight, Excel formula compatible algorithm library aimed at improving developers’ productivity in different business scenes. ToolGood.Algorithm是一个功能强大、轻量级、兼容Excel公式的算法类库,旨在提高开发人员在不同业务场景中的生产力。

License: Apache License 2.0

C# 42.81% Batchfile 0.01% ANTLR 0.79% Java 42.00% JavaScript 13.70% HTML 0.37% CSS 0.32%
algorithm excel excel-expressions script formula-grammar formula expression arithmetic dotnet java

toolgood.algorithm's Introduction

ToolGood.Algorithm

English document

ToolGood.Algorithm是一个功能强大、轻量级、兼容Excel公式的算法类库,旨在提高开发人员在不同业务场景中的生产力。

WebAssembly版本,请看csharp文件夹下ToolGood.Algorithm.WebAssembly,ToolGood.Algorithm2.WebTest 两个项目。

适用场景: 代码与算法分离,避免项目强制升级

1)项目初期,未确定的算法;

2)项目维护时,经常改动的算法;

3)财务数据、统计数据之中的算法,(注:部分公式会使用double类型,建议使用为单位);

4)报表导出,数据来源使用存储过程,Word文档内设置算法。例 https://github.com/toolgood/ToolGood.WordTemplate

5)可视化规则引擎,如:https://github.com/toolgood/ToolGood.FlowVision

快速上手

    AlgorithmEngine engine = new AlgorithmEngine();
    double a=0.0;
    if (engine.Parse("1+2")) {
        var o = engine.Evaluate();
        a=o.NumberValue;
    }
    var b = engine.TryEvaluate("1=1 && 1<2 and 7-8>1", 0);// Support(支持) && || and or 
    var c = engine.TryEvaluate("2+3", 0);
    var q = engine.TryEvaluate("-7 < -2 ?1 : 2", 0);
    var e = engine.TryEvaluate("count(array(1, 2, 3, 4))", 0);//{} represents array, return: 4 {}代表数组, 返回:4
    var s = engine.TryEvaluate("'aa'&'bb'", ""); //String connection, return: AABB 字符串连接, 返回:aabb
    var r = engine.TryEvaluate("(1=1)*9+2", 0); //Return: 11 返回:11
    var d = engine.TryEvaluate("'2016-1-1'+1", DateTime.MinValue); //Return date: 2016-1-2 返回日期:2016-1-2
    var t = engine.TryEvaluate("'2016-1-1'+9*'1:0'", DateTime.MinValue);//Return datetime:2016-1-1 9:0  返回日期:2016-1-1 9:0
    var j = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare\", \"Age\":51, \"Birthday\":\"04/26/1564 00:00:00\"}').Age", null);//Return 51 返回51
    var k = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare   \", \"Age\":51, \"Birthday\":\"04/26/1564 00:00:00\"}')[Name].Trim()", null);//Return to "William Shakespeare"  返回"William Shakespeare" (不带空格)
    var l = engine.TryEvaluate("json('{\"Name1\":\"William Shakespeare \", \"Age\":51, \"Birthday\":\"04/26/1564 00:00:00\"}')['Name'& 1].Trim().substring(2, 3)", null);//Return "ill"  返回"ill"
    var n = engine.TryEvaluate("{Name:\"William Shakespeare\", Age:51, Birthday:\"04/26/1564 00:00:00\"}.Age", null);//Return 51 返回51
    var m = engine.TryEvaluate("{1,2,3,4,5,6}.has(13)", true);//Return false 返回false

支持常量pi, e, true, false

数值转bool,非零为真, 零为假。字符串转bool, 0FALSE为假,1TRUE为真。不区分大小写。

bool转数值,假为0,真为1。bool转字符串,假为FALSE,真为TRUE

索引默认为Excel索引,如果想用c#索引,请设置UseExcelIndexfalse

中文符号自动转成英文符号:括号, 逗号, 引号, 双引号,,,等号

注:字符串拼接使用&

注:find为Excel公式,find(要查找的字符串, 被查找的字符串[, 开始位置])

自定义参数

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

        protected override Operand GetParameter(string parameter)
        {
            if (parameter == "半径")
            {
                return Operand.Create(_radius);
            }
            if (parameter == "直径")
            {
                return Operand.Create(_radius * 2);
            }
            if (parameter == "")
            {
                return Operand.Create(_height);
            }
            return base.GetParameter(parameter);
        }
    }
    //Call method  调用方法
    Cylinder c = new Cylinder(3, 10);
    c.TryEvaluate("[半径]*[半径]*pi()", 0.0);      //Round bottom area  圆底面积
    c.TryEvaluate("[直径]*pi()", 0.0);            //The length of the circle  圆的长
    c.TryEvaluate("[半径]*[半径]*pi()*[高]", 0.0); //Volume of circle 圆的体积
    c.TryEvaluate("['半径']*[半径]*pi()*[高]", 0.0); //Volume of circle 圆的体积
    c.EvaluateFormula("'圆'-[半径]-高", '-'); // Return: 圆-3-10
    c.GetSimplifiedFormula("半径*if(半径>2, 1+4, 3)"); // Return: 3 * 5

参数定义,如 [参数名]【参数名】#参数名#@参数名

注:还可以使用AddParameterAddParameterFromJson添加方法,使用DiyFunction+=来自定义函数。

注2:使用 AlgorithmEngineHelper.GetDiyNames 获取参数名自定义方法名

自定义参数

    AlgorithmEngineHelper.IsKeywords("false"); // return true
    AlgorithmEngineHelper.IsKeywords("true"); // return true
    AlgorithmEngineHelper.IsKeywords("mysql"); // return false

    DiyNameInfo p5 = AlgorithmEngineHelper.GetDiyNames("ddd(d1, 22)");
    Assert.AreEqual("ddd", p5.Functions[0]);
    Assert.AreEqual("d1", p5.Parameters[0]);

支持单位

可设置标准单位:长度DistanceUnit(默认:m)、面积AreaUnit(默认:m2)、体积VolumeUnit(默认:m3)、重量MassUnit(默认:kg)。

注:公式计算时,先将带单位的数量转成标准单位,再进行数字计算。

    AlgorithmEngine engine = new AlgorithmEngine();
    bool a = engine.TryEvaluate("1=1m", false); // return true
    bool b = engine.TryEvaluate("1=1m2", false); // return true
    bool c = engine.TryEvaluate("1=1m3", false); // return true
    bool d = engine.TryEvaluate("1=1kg", false); // return true

    // 单位转化
    var num = AlgorithmEngineHelper.UnitConversion(1M,"","千米"); 

    // 不抛错例子
    bool error = engine.TryEvaluate("1m=1m2", false); // return true

Excel公式

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

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

注2:函数名带★,表示第一个参数可以前置,如(-1).ISTEXT()

注3:函数名带▲,表示受Excel索引影响,

逻辑函数

函数名说明示例
IFif(测试条件, 真值[, 假值])
执行真假值判断, 根据逻辑计算的真假值, 返回不同结果。
if(1=1, 1, 2)
>>1
ifErrorifError(测试条件, 真值[, 假值])
如果公式计算出错误则返回您指定的值;否则返回公式结果。
ifError(1/0, 1, 2)
>>1
isError ★ isError(值)
判断是否出错, 返回 TRUE 或 FALSE isError(值, 替换值)
如果出错, 返回替换值,否则返回原值
isError(1)
>>false
isNull ★ isNull(值)
判断是否为空, 返回 TRUE 或 FALSE isNull(值, 替换值)
如果为空, 返回替换值,否则返回原值
isNull(null)
>>true
isNullOrError ★ isNullOrError(值)
判断是否为空或错误, 返回 TRUE 或 FALSE isNullOrError(值, 替换值)
如果为空或错误, 返回替换值,否则返回原值
isNullOrError(null)
>>true
isNumber ★isNumber(值)
判断是否数值, 返回 TRUE 或 FALSE
isNumber(1)
>>true
isText ★isText(值)
判断是否文字, 返回 TRUE 或 FALSE
isText('1')
>>true
IsNonText ★IsNonText(值)
判断是否为非文字, 返回 TRUE 或 FALSE
IsNonText('1')
>>false
IsLogical ★IsLogical(值)
判断是否为逻辑值, 返回 TRUE 或 FALSE
IsLogical('1')
>>false
IsEven ★IsEven(值)
如果数值是偶数, 返回 TRUE 或 FALSE
IsEven('1')
>>false
IsOdd ★IsOdd(值)
如果数值是奇数, 返回 TRUE 或 FALSE
IsOdd('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

数学与三角函数

分类函数名说明示例






Ee()
返回 e 值
E()
>>
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
int ★int(数值)
将数值向下舍入到最接近的整数。
int(9.222)
>>9
gcdgcd(数值, ...)
返回最大公约数
GCD(3, 5, 7)
>>1
LCMlcm(数值, ...)
返回整数参数的最小公倍数
LCM(3, 5, 7)
>>105
combincombin(总数, 排列数)
计算从给定数目的对象集合中提取若干对象的组合数
combin(10, 2)
>>45
PERMUTpermut(总数, 排列数)
返回从给定数目的对象集合中选取的若干对象的排列数
PERMUT(10, 2)
>>990
FIXEDfixed(数值[, 小数位数[, 有无逗号分隔符]])
将数值设置为具有固定小数位的文本格式
FIXED(4567.89, 1)
>>4, 567.9






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(数值, ...)
返回参数和的阶乘与各参数阶乘乘积的比值
MULTINOMIAL(1, 2, 3)
>>60
PRODUCTproduct(数值, ...)
将所有以参数形式给出的数值相乘, 并返回乘积值。
PRODUCT(1, 2, 3, 4)
>>24
SqrtPiSqrtPi(数值)
返回某数与 PI 的乘积的平方根
SqrtPi(3)
>>3.069980124
SUMSQsumQq(数值, ...)
返回参数的平方和
SUMSQ(1, 2)
>>5


DEC2BIN ★DEC2BIN(数值[, 位数])
十进制转二进制
DEC2BIN(100)
>>
DEC2OCT ★DEC2OCT(数值[, 位数])
十进制转八进制
DEC2OCT(100)
>>
DEC2HEX ★DEC2HEX(数值[, 位数])
十进制转十六进制
DEC2HEX(100)
>>
HEX2BIN ★HEX2BIN(数值[, 位数])
十六进制转二进制
HEX2BIN(100)
>>
HEX2OCT ★HEX2OCT(数值[, 位数])
十六进制转八进制
HEX2OCT(100)
>>
HEX2DEC ★HEX2DEC(数值)
十六进制转十进制
HEX2DEC(100)
>>
OCT2BIN ★OCT2BIN(数值[, 位数])
八进制转二进制
OCT2BIN(100)
>>
OCT2DEC ★OCT2DEC(数值)
八进制转十进制
OCT2DEC(100)
>>
OCT2HEX ★OCT2HEX(数值[, 位数])
八进制转十六进制
OCT2HEX(100)
>>
BIN2OCT ★BIN2OCT(数值[, 位数])
二进制转八进制
BIN2OCT(100)
>>
BIN2DEC ★BIN2DEC(数值)
二进制转十进制
BIN2DEC(100)
>>
BIN2HEX ★BIN2HEX(数值[, 位数])
二进制转十六进制
BIN2HEX(100)
>>

文本函数

函数名说明示例
ASC ★asc(字符串)
将字符串内的全角英文字母更改为半角字符
asc('abcABC123')
>>abcABC123
JIS ★
WIDECHAR ★
jis(字符串)
将字符串中的半角英文字符更改为全角字符
jis('abcABC123')
>>abcABC123
CHAR ★CHAR(数值)
返回由代码数值指定的字符
char(49)
>>1
CLEAN ★clean(字符串)
删除文本中所有打印不出的字符
clean('\r112\t')
>>112
CODE ★code(字符串)
返回文本字符串中第一个字符的数值代码
CODE("1")
>>49
CONCATENATE ★concatenate(字符串1, ...)
将若干文本项合并到一个文本项中
CONCATENATE('tt', '11')
>>tt11
EXACT ★exact(字符串1, 字符串2)
检查两个文本值是否完全相同
EXACT("11", "22")
>>false
FIND ★ ▲find(要查找的字符串, 被查找的字符串[, 开始位置])
在一文本值内查找另一文本值(区分大小写)
FIND("11", "12221122")
>>5
LEFT ★left(字符串[, 字符个数])
返回文本值最左边的字符
LEFT('123222', 3)
>>123
LEN ★len(字符串)
返回文本字符串中的字符个数
LEN('123222')
>>6
MID ★ ▲mid(字符串, 开始位置, 字符个数)
从文本字符串中的指定位置起返回特定个数的字符
MID('ABCDEF', 2, 3)
>>BCD
PROPER ★proper(字符串)
将文本值中每一个单词的首字母设置为大写
PROPER('abc abc')
>>Abc Abc
REPLACE ★ ▲ replace(原字符串, 开始位置, 字符个数, 新字符串)
replace(原字符串, 要替换的字符串, 新字符串)
替换文本内的字符
REPLACE("abccd", 2, 3, "2")
>>a2d
REPLACE("abccd", "bc", "2")
>>a2cd
REPT ★rept(字符串, 重复次数)
按给定次数重复文本
REPT("q", 3)
>>qqq
RIGHT ★right(字符串[, 字符个数])
返回文本值最右边的字符
RIGHT("123q", 3)
>>23q
RMB ★RMB(数值)
将数值转换为大写数值文本
RMB(12.3)
>>壹拾贰元叁角
SEARCH ★ ▲search(要找的字符串, 被查找的字符串[, 开始位置])
在一文本值中查找另一文本值(不区分大小写)
SEARCH("aa", "abbAaddd")
>>4
SUBSTITUTE ★substitute(字符串, 原字符串, 新字符串[, 替换序号])
在文本字符串中以新文本替换旧文本
SUBSTITUTE("ababcc", "ab", "12")
>>1212cc
T ★t(数值)
将参数转换为文本
T('123')
>>123
TEXT ★text(数值, 数值格式)
设置数值的格式并将数值转换为文本
TEXT(123, "0.00")
>>123.00
TRIM ★trim(字符串)
删除文本中的空格
TRIM(" 123 123 ")
>>123 123
LOWER ★
TOLOWER ★
lower(字符串)
tolower(字符串)
将文本转换为小写形式
LOWER('ABC')
>>abc
UPPER ★
TOUPPER ★
upper(字符串)
toupper(字符串)
将文本转换为大写形式
UPPER("abc")
>>ABC
VALUE ★value(字符串)
将文本参数转换为数值
VALUE("123")
>>123

日期与时间函数

函数名说明示例
NOWnow()
返回当前日期和时间的序列号
NOW()
>>2017-01-07 11:00:00
TODAYtoday()
返回今天日期的序列号
TODAY()
>>2017-01-07
DateValue ★DateValue(字符串)
将文本格式的日期转换为序列号
DateValue("2017-01-02")
>>2017-01-02
TimeValue ★TimeValue(字符串)
将文本格式的时间转换为序列号
TimeValue("12:12:12")
>>12:12:12
DATE ★date(年, 月, 日[, 时[, 分[, 秒]]])
返回特定日期的序列号
DATE(2016, 1, 1)
>>2016-01-01
TIME ★time(时, 分, 秒)
返回特定时间的序列号
TIME(12, 13, 14)
>>12:13:14
YEAR ★year(日期)
将序列号转换为年
YEAR(NOW())
>>2017
MONTH ★month(日期)
将序列号转换为月
MONTH(NOW())
>>1
DAY ★day(日期)
将序列号转换为月份中的日
DAY(NOW())
>>7
HOUR ★hour(日期)
将序列号转换为小时
HOUR(NOW())
>>11
MINUTE ★minute(日期)
将序列号转换为分钟
MINUTE(NOW())
>>12
SECOND ★second(日期)
将序列号转换为秒
SECOND(NOW())
>>34
WEEKDAY ★second(日期)
将序列号转换为星期几
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
扩展函数
函数名说明示例
AddYears ★AddYears(时间, 数值)
增加年。
AddMonths ★AddMonths(时间, 数值)
增加月。
AddDays ★AddDays(时间, 数值)
增加日。
AddHours ★AddHours(时间, 数值)
增加小时。
AddMinutes ★AddMinutes(时间, 数值)
增加分钟。
AddSeconds ★AddSeconds(时间, 数值)
增加秒。
DateValue ★DateValue(值, 数值)
转成时间
DateValue(文本/数值, 0)
解析,自动匹配到当前日期相近的日期
DateValue(文本, 1)
解析年月日文本
DateValue(数值, 2)
转成日期,Excel数值
DateValue(数值, 3)
转成日期,时间戳(毫秒)
DateValue(值数值, 4)
转成日期,时间戳(秒)
Timestamp ★Timestamp(值[, 数值=0])
转成时间戳,默认为毫秒
Timestamp(时间, 0)
转成时间戳(毫秒)
Timestamp(时间, 1)
转成时间戳(秒)

注:UseLocalTime属性影响 DateValue/Timestamp 转换,设置true,直接转成本地时间。

统计函数

函数名说明示例
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(数值, ...)
返回在数组中出现频率最多的数值
MODE(1, 2, 3, 4, 2, 2, 1, 4)
>>2
LARGE ▲large(数组, K)
返回数据集中第 k 个最大值
LARGE({1, 2, 3, 4, 2, 2, 1, 4}, 3)
>>3
SMALL ▲small(数值, 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(数值, ...)
返回参数的平均值
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(数值, ...)
返回正数数组或区域的几何平均值
GEOMEAN(1, 2, 3, 4)
>>2.213363839
HARMEANharMean(数值, ...)
返回数据集合的调和平均值
HARMEAN(1, 2, 3, 4)
>>1.92
COUNTcount(数值, ...)
计算参数列表中数值的个数
COUNT(1, 2, 3, 4, 2, 2, 1, 4)
>>8
countIfcountIf({数值, ...}, 条件[, {值1, ...}])
计算参数列表中数值的个数
countIf({1, 2, 3, 4, 2, 2, 1, 4}, '>1')
>>6
SUMsum(数值, ...)
返回所有数值之和。
SUM(1, 2, 3, 4)
>>10
sumIfsumIf({数值, ...}, 条件[, {值1, ...}])
返回所有数值之和
sumIf({1, 2, 3, 4, 2, 2, 1, 4}, '>1')
>>17
AVEDEVaveDev(数值, ...)
返回数据点与其平均值的绝对偏差的平均值
AVEDEV(1, 2, 3, 4, 2, 2, 1, 4)
>>0.96875
STDEVstDev(数值, ...)
基于样本估算标准偏差
STDEV(1, 2, 3, 4, 2, 2, 1, 4)
>>1.1877349391654208
STDEVPstDevp(数值, ...)
计算基于整个样本总体的标准偏差
STDEVP(1, 2, 3, 4, 2, 2, 1, 4)
>>1.1110243021644486
DEVSQdevSq(数值, ...)
返回偏差的平方和
DEVSQ(1, 2, 3, 4, 2, 2, 1, 4)
>>9.875
VARvar(数值, ...)
基于样本估算方差
VAR(1, 2, 3, 4, 2, 2, 1, 4)
>>1.4107142857142858
VARPvarp(数值, ...)
基于整个样本总体计算方差
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
normSInvnormSInv(数值)
返回反标准正态累积分布
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
TInvTInv(分布概率, 自由度)
返回学生的 t 分布的反分布
TInv(0.12, 23)
>>1.614756561
WEIBULLweibull(数值, 分布参数α, 分布参数β, 返回类型:0/1)
返回 Weibull 分布
WEIBULL(1, 2, 3, 1)
>>0.105160683

查找引用

函数名说明示例
VLookUp ★ ▲VLookUp({数组, ...}, 值, {列索引}[, 模糊匹配:0/1])
纵向查找函数。模糊匹配默认1
VLookUp ★ ▲VLookUp({Json, ...}, 公式字符串, 属性名)
JSON数组查找函数。

增加函数 类C#方法

函数名说明示例
UrlEncode ★UrlEncode(文本)
对 URL 字符串进行编码。
UrlDecode ★UrlEncode(文本)
将 URL 编码的字符串转换为已解码的字符串。
HtmlEncode ★HtmlEncode(文本)
将字符串转换为 HTML 编码的字符串。
HtmlDecode ★HtmlDecode(文本)
将HTML 编码的字符串转解码。
Base64ToText ★Base64ToText(文本[, 编码类型])
将Base64转换为字符串。
Base64UrlToText ★Base64UrlToText(文本[, 编码类型])
将Url类型的Base64 转换为字符串。
TextToBase64 ★TextToBase64(文本[, 编码类型])
将字符串转换为Base64字符串。
TextToBase64Url ★TextToBase64Url(文本[, 编码类型])
将字符串 转换为Url类型的Base64 字符串。
Regex ★ ▲Regex(文本, 匹配文本])
并返回匹配的字符串。
RegexRepalce ★RegexRepalce(文本, 匹配文本, 替换文本)
匹配替换字符串。
IsRegex ★
IsMatch ★
IsRegex(文本, 匹配文本)
IsMatch(文本, 匹配文本)
判断是否匹配。
GuidGuid()
生成Guid字符串。
Md5 ★Md5(文本[, 编码类型])
返回Md5的Hash字符串。
Sha1 ★Sha1(文本[, 编码类型])
返回Sha1的Hash字符串。
Sha256 ★Sha256(文本[, 编码类型])
返回Sha256的Hash字符串。
Sha512 ★Sha512(文本[, 编码类型])
返回Sha512的Hash字符串。
Crc32 ★Crc32(文本[, 编码类型])
返回Crc32的Hash字符串。
HmacMd5 ★HmacMd5(文本, secret[, 编码类型])
返回HmacMd5的Hash字符串。
HmacSha1 ★HmacSha1(文本, secret[, 编码类型])
返回HmacSha1的Hash字符串。
HmacSha256 ★HmacSha256(文本, secret[, 编码类型])
返回HmacSha256的Hash字符串。
HmacSha512 ★HmacSha512(文本, secret[, 编码类型])
返回HmacSha512的Hash字符串。
TrimStart ★
LTrim ★
TrimStart(文本)
LTrim(文本)
LTrim(文本[, 字符集])
消空字符串左边。
TrimEnd ★
RTrim ★
TrimEnd(文本)
RTrim(文本)
RTrim(文本, 字符集)
消空字符串右边。
IndexOf ★ ▲IndexOf(文本, 查找文本[, 开始位置[, 索引]])
查找字符串位置。
LastIndexOf ★ ▲LastIndexOf(文本, 查找文本[, 开始位置[, 索引]])
查找字符串位置。
Split ★Split(文本, 分隔符)
生成数组
Split(文本, 分隔符, 索引)
返回分割后索引指向的字符串。
Join ★Join(文本1, 文本2....)
合并字符串。
Substring ★ ▲Substring(文本, 位置)
Substring(文本, 位置, 数量)
切割字符串。
StartsWith ★StartsWith(文本, 开始文本[, 是否忽略大小写:1/0])
确定此字符串实例的开头是否与指定的字符串匹配。
EndsWith ★EndsWith(文本, 开始文本[, 是否忽略大小写:1/0])
确定使用指定的比较选项进行比较时此字符串实例的结尾是否与指定的字符串匹配。
IsNullOrEmpty ★IsNullOrEmpty(文本)
指示指定的字符串是 null 还是 空字符串。
IsNullOrWhiteSpace ★IsNullOrWhiteSpace(文本)
指示指定的字符串是 null、空还是仅由空白字符组成。
RemoveStart ★RemoveStart(文本, 左边文本[, 忽略大小写])
匹配左边,成功则去除左边字符串。
RemoveEnd ★RemoveEnd(文本, 右边文本[, 忽略大小写])
匹配右边,成功则去除右边字符串。
Json ★json(文本)
动态json查询。
Error Error(文本)
主动抛错。
HAS ★
HASKEY ★
CONTAINS ★
CONTAINSKEY ★
HAS(json/数组,文本)
json格式 是否包含Key
数组是否包含值
HASVALUE ★
CONTAINSVALUE ★
HASVALUE(json/数组, 文本)
json格式 是否包含Value
数组是否包含值
PARAM
PARAMETER
GETPARAMETER
GETPARAMETER(文本)
动态获取参数

比特币私钥碰撞机

比特币私钥碰撞机,利用电脑空闲性能(3G内存),搏25万枚比特币。

比特币私钥碰撞机(收费50元)

比特币私钥碰撞机源码(收费500元)

toolgood.algorithm's People

Contributors

dependabot[bot] avatar toolgood avatar zhangbohan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

toolgood.algorithm's Issues

公式返回数字类型都是Double,能否返回实际类型

例如

AlgorithmEngine engine = new AlgorithmEngine();
Operand operand = engine.Evaluate("year(now())");

Object result;
switch (operand.Type()) {
      case BOOLEAN: result = operand.BooleanValue();
      case ARRARY: result = operand.ArrayValue();
      case DATE: result = operand.DateValue();
      case JSON: result = operand.JsonValue();
      case TEXT: result = operand.TextValue();
      case NUMBER: result = operand.NumberValue();
      default: result = null;
  }
assertEquals(2023, result);

days360 not correct

Hi,

days360(date(2020,5,31),date(2023,12,15)) not working.
in the projection, code "new DateTime(startMyDate.Year, startMyDate.Month + 1, 1).AddDays(-1).Day)" should change to "new DateTime(startMyDate.Year, startMyDate.Month, 1).AddMonths(1).AddDays(-1).Day"

thanks,
lyk

未能加载文件或程序集“Antlr4.Runtime.Standard”或它的某一个依赖项

我使用.NET FRAMEWORK 4.7 的 MVC默认项目,添加NUGET包,后运行就报错,应该是版本问题,我换成 4.11的版本后,运行不报错,可是解析报错,似乎是版本里方法不对了,请求支援,非常感谢。以下是报错信息:

未能加载文件或程序集“Antlr4.Runtime.Standard”或它的某一个依赖项。未能验证强名称签名。此程序集可能已被篡改,或者已被延迟签名,但没有用正确的私钥进行完全签名。 (异常来自 HRESULT:0x80131045)
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IO.FileLoadException: 未能加载文件或程序集“Antlr4.Runtime.Standard”或它的某一个依赖项。未能验证强名称签名。此程序集可能已被篡改,或者已被延迟签名,但没有用正确的私钥进行完全签名。 (异常来自 HRESULT:0x80131045)

大神,帮我看一下

我这边有一个excel公式,但是没有达到预期的结果,能帮我看一下吗

    
     var express= "IF(ISNUMBER(FIND(\"**\",\"内蒙古,宁夏\")),CEILING(0.4600,1)*10,IF(ISNUMBER(FIND(\"**\",\"青海,甘肃\")),CEILING(0.4600,1)*13,IF(ISNUMBER(FIND(\"**\",\"**,西藏\")),CEILING(0.4600,1)*15,5+(CEILING(0.4600-1,1)*2))))";
        
           AlgorithmEngine engine = new AlgorithmEngine();
              var c = engine.TryEvaluate(express, -1.00);

实际结果应该是15,而不是10

提议:ToolGood.Algorithm 合并ToolGood.FlowVision 中的ToolGood.Algorithm2

ToolGood.Algorithm2 与 ToolGood.Algorithm 工程上的扩展,包括了长度、重量、体积换算
Extension of ToolGood.Algorithm2 and ToolGood.Algorithm engineering, including length, weight, and volume conversions

当默认 “长度单位”为米
When the default 'length unit' is meters
当默认 “面积单位”为平方米
When the default 'area unit' is square meters
当默认 “体积单位”为立方米
When the default 'volume unit' is cubic meters
当默认 “重量单位”为千克
When the default 'weight unit' is kilogram

可以设置以下公式 The following formula can be set

if(length > 50cm,1,0)

if(area <=25m2,1,0)

if(weight >50kg,1,0)

if(weight >5t,1,0)

主要原因还是我懒,不想同时维护两套代码。
The main reason is that I am lazy and do not want to maintain two sets of code at the same time.

日期操作

支持对指定日期的时分秒进行增加或减少操作吗?

if(1,123,int("")) return empty

Hi guys,

The formula =if(1,123,int("")) doesn't work. it should return 123, but it return empty. Could you fix it please?

thanks,
lyk

=00005.5*10 not work

Hi,

it seems formula =00005.5*10 not work.
=value(00005.5) doesn't work either.
only =value("00005,5")*10 or "00005.5"*10 works.

could you support =00005.5*10 and =value(00005.5)?

thanks,
lyk

下个版本构思

当前问题:
1、当前语言为法语时,数字识别会出错。
2、运行速度比较慢。

下个版本构思
1、使用Antlr4版本重构
2、JAVA版本

Year/Month/Day function not working for number

Hi,

I met problems when using year/month/day functions.
In excel Year(44406)=2021,Month(44406)=7, Day(44406)=29.
however, toolgood will give out strange values.

btw, I want to say the toolgood is excellent, really good.

thanks,
lyk

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.