Skip to content

Commit 2065629

Browse files
committed
1.3.1.7版本
1 parent bed8c2d commit 2065629

File tree

4 files changed

+138
-55
lines changed

4 files changed

+138
-55
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ ToolGood.Algorithm֧
1818
```
1919
支持常量`pi`,`e`,`true`,`false`
2020

21+
数字转bool,非零为真
22+
2123
索引默认为`Excel索引`,如果想用c#索引,请设置`UseExcelIndex``false`
2224

25+
2326
## 自定义参数
2427
``` csharp
2528
//定义圆柱信息

ToolGood.Algorithm/AlgorithmEngine.cs

Lines changed: 130 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ protected void AddFunction(string funName, Func<List<Operand>, Operand> function
5151
#endregion
5252

5353
#region Parse
54-
54+
/// <summary>
55+
/// 编译公式,默认
56+
/// </summary>
57+
/// <param name="exp">公式</param>
58+
/// <returns></returns>
5559
public bool Parse(string exp)
5660
{
5761
if (string.IsNullOrEmpty(exp) || exp.Trim() == "" || !this.isMatching(exp)) {
@@ -62,7 +66,13 @@ public bool Parse(string exp)
6266
m_tokens = parse(exp, out error);
6367
return true;
6468
}
65-
public bool Parse(string exp ,out string error)
69+
/// <summary>
70+
/// 编译公式,并输出错误,默认
71+
/// </summary>
72+
/// <param name="exp">公式</param>
73+
/// <param name="error">输出错误</param>
74+
/// <returns></returns>
75+
public bool Parse(string exp, out string error)
6676
{
6777
if (string.IsNullOrEmpty(exp) || exp.Trim() == "" || !this.isMatching(exp)) {
6878
error = "exp无效";
@@ -72,18 +82,30 @@ public bool Parse(string exp ,out string error)
7282
m_tokens = parse(exp, out error);
7383
return true;
7484
}
75-
85+
/// <summary>
86+
/// 编译公式
87+
/// </summary>
88+
/// <param name="name">名称</param>
89+
/// <param name="exp">公式</param>
90+
/// <returns></returns>
7691
public bool Parse(string name, string exp)
7792
{
7893
if (string.IsNullOrEmpty(exp) || exp.Trim() == "" || !this.isMatching(exp)) {
7994
LastError = "exp无效";
8095
return false;
8196
}
8297
string error;
83-
tokenDict[name] = parse(exp,out error);
98+
tokenDict[name] = parse(exp, out error);
8499
LastError = error;
85100
return true;
86101
}
102+
/// <summary>
103+
/// 编译公式,并输出错误
104+
/// </summary>
105+
/// <param name="name">名称</param>
106+
/// <param name="exp">公式</param>
107+
/// <param name="error">输出错误</param>
108+
/// <returns></returns>
87109
public bool Parse(string name, string exp, out string error)
88110
{
89111
if (string.IsNullOrEmpty(exp) || exp.Trim() == "" || !this.isMatching(exp)) {
@@ -97,7 +119,7 @@ public bool Parse(string name, string exp, out string error)
97119
}
98120

99121

100-
private Stack<object> parse(string exp,out string error)
122+
private Stack<object> parse(string exp, out string error)
101123
{
102124
error = null;
103125
var tmp = parse(exp);
@@ -396,12 +418,16 @@ private List<string> splitText(string exp)
396418
#endregion
397419

398420
#region GetParameterNames
399-
421+
/// <summary>
422+
/// 获取所有参数名称
423+
/// </summary>
424+
/// <returns></returns>
400425
public List<string> GetParameterNames()
401426
{
402427
return GetParameterNames(m_tokens);
403428
}
404-
private List<string> GetParameterNames(Stack<object> tokens )
429+
430+
private List<string> GetParameterNames(Stack<object> tokens)
405431
{
406432
List<string> list = new List<string>();
407433
foreach (var item in tokens) {
@@ -420,19 +446,32 @@ private List<string> GetParameterNames(Stack<object> tokens )
420446
#endregion
421447

422448
#region Evaluate
449+
/// <summary>
450+
/// 执行,默认
451+
/// </summary>
452+
/// <returns></returns>
423453
public object Evaluate()
424454
{
425-
if (m_tokens.Count == 0) return null;
455+
if (m_tokens.Count == 0) {
456+
LastError = "请编译公式!";
457+
throw new Exception("请编译公式!");
458+
}
426459
return evaluate(m_tokens);
427460
}
428461

462+
/// <summary>
463+
/// 执行
464+
/// </summary>
465+
/// <param name="name">名称</param>
466+
/// <returns></returns>
429467
public object Evaluate(string name)
430468
{
431469
Stack<object> tokens = null;
432470
if (tokenDict.TryGetValue(name, out tokens)) {
433471
return evaluate(tokens);
434472
}
435-
return null;
473+
LastError = "请编译公式!";
474+
throw new Exception("请编译公式!");
436475
}
437476

438477
private object evaluate(Stack<object> tokens)
@@ -559,121 +598,162 @@ private object evaluate(Stack<object> tokens)
559598
public short TryEvaluate(string exp, short def)
560599
{
561600
if (Parse(exp)) {
562-
var obj = Evaluate();
563-
if (obj is Date) return (short)(double)(Date)obj;
564-
return (short)(double)obj;
601+
try {
602+
var obj = Evaluate();
603+
if (obj is Date) return (short)(double)(Date)obj;
604+
return (short)(double)obj;
605+
} catch (Exception) { }
565606
}
566607
return def;
567608
}
568609
public int TryEvaluate(string exp, int def)
569610
{
570611
if (Parse(exp)) {
571-
var obj = Evaluate();
572-
if (obj is Date) return (int)(double)(Date)Evaluate();
573-
return (int)(double)obj;
612+
try {
613+
var obj = Evaluate();
614+
if (obj is Date) return (int)(double)(Date)Evaluate();
615+
return (int)(double)obj;
616+
} catch (Exception) { }
574617
}
575618
return def;
576619
}
577620
public long TryEvaluate(string exp, long def)
578621
{
579622
if (Parse(exp)) {
580-
var obj = Evaluate();
581-
if (obj is Date) return (long)(double)(Date)obj;
582-
return (long)(double)obj;
623+
try {
624+
var obj = Evaluate();
625+
if (obj is Date) return (long)(double)(Date)obj;
626+
return (long)(double)obj;
627+
} catch (Exception) {
628+
}
583629
}
584630
return def;
585631
}
586632

587633
public ushort TryEvaluate(string exp, ushort def)
588634
{
589635
if (Parse(exp)) {
590-
var obj = Evaluate();
591-
if (obj is Date) return (ushort)(double)(Date)obj;
592-
return (ushort)(double)obj;
636+
try {
637+
var obj = Evaluate();
638+
if (obj is Date) return (ushort)(double)(Date)obj;
639+
return (ushort)(double)obj;
640+
} catch (Exception) {
641+
}
593642
}
594643
return def;
595644
}
596645
public uint TryEvaluate(string exp, uint def)
597646
{
598647
if (Parse(exp)) {
599-
var obj = Evaluate();
600-
if (obj is Date) return (uint)(double)(Date)obj;
601-
return (uint)(double)obj;
648+
try {
649+
var obj = Evaluate();
650+
if (obj is Date) return (uint)(double)(Date)obj;
651+
return (uint)(double)obj;
652+
} catch (Exception) {
653+
}
602654
}
603655
return def;
604656
}
605657
public ulong TryEvaluate(string exp, ulong def)
606658
{
607659
if (Parse(exp)) {
608-
var obj = Evaluate();
609-
if (obj is Date) return (ulong)(double)(Date)obj;
610-
return (ulong)(double)obj;
660+
try {
661+
var obj = Evaluate();
662+
if (obj is Date) return (ulong)(double)(Date)obj;
663+
return (ulong)(double)obj;
664+
} catch (Exception) {
665+
}
611666
}
612667
return def;
613668
}
614669

615670
public float TryEvaluate(string exp, float def)
616671
{
617672
if (Parse(exp)) {
618-
var obj = Evaluate();
619-
if (obj is Date) return (float)(double)(Date)obj;
620-
return (float)(double)obj;
673+
try {
674+
var obj = Evaluate();
675+
if (obj is Date) return (float)(double)(Date)obj;
676+
return (float)(double)obj;
677+
} catch (Exception) {
678+
}
621679
}
622680
return def;
623681
}
624682
public double TryEvaluate(string exp, double def)
625683
{
626684
if (Parse(exp)) {
627-
var obj = Evaluate();
628-
if (obj is Date) return (double)(Date)obj;
629-
return (double)obj;
685+
try {
686+
var obj = Evaluate();
687+
if (obj is Date) return (double)(Date)obj;
688+
return (double)obj;
689+
} catch (Exception) {
690+
}
630691
}
631692
return def;
632693
}
633694

634695
public string TryEvaluate(string exp, string def)
635696
{
636697
if (Parse(exp)) {
637-
return Evaluate().ToString();
698+
try {
699+
return Evaluate().ToString();
700+
} catch (Exception) {
701+
}
638702
}
639703
return def;
640704
}
641705
public bool TryEvaluate(string exp, bool def)
642706
{
643707
if (Parse(exp)) {
644-
return (bool)Evaluate();
708+
try {
709+
var obj = Evaluate();
710+
if (obj is string) {
711+
return bool.Parse(obj.ToString());
712+
}
713+
if (obj is bool) {
714+
return (bool)obj;
715+
}
716+
if (obj is Date) return def;
717+
return decimal.Parse(obj.ToString()) != 0;
718+
} catch (Exception) {
719+
}
645720
}
646721
return def;
647722
}
648723

649724
public DateTime TryEvaluate(string exp, DateTime def)
650725
{
651726
if (Parse(exp)) {
652-
var obj = Evaluate();
653-
if (obj is string) {
654-
DateTime dt;
655-
if (DateTime.TryParse(obj.ToString(), out dt)) {
656-
return dt;
727+
try {
728+
var obj = Evaluate();
729+
if (obj is string) {
730+
DateTime dt;
731+
if (DateTime.TryParse(obj.ToString(), out dt)) {
732+
return dt;
733+
}
734+
return def;
657735
}
658-
return def;
659-
}
660-
return (DateTime)(Date)Evaluate();
736+
return (DateTime)(Date)Evaluate();
737+
} catch (Exception) { }
661738
}
662739
return def;
663740
}
664741

665742
public TimeSpan TryEvaluate(string exp, TimeSpan def)
666743
{
667744
if (Parse(exp)) {
668-
var obj = Evaluate();
669-
if (obj is string) {
670-
TimeSpan dt;
671-
if (TimeSpan.TryParse(obj.ToString(), out dt)) {
672-
return dt;
745+
try {
746+
var obj = Evaluate();
747+
if (obj is string) {
748+
TimeSpan dt;
749+
if (TimeSpan.TryParse(obj.ToString(), out dt)) {
750+
return dt;
751+
}
752+
return def;
673753
}
674-
return def;
754+
return (TimeSpan)(Date)Evaluate();
755+
} catch (Exception) {
675756
}
676-
return (TimeSpan)(Date)Evaluate();
677757
}
678758
return def;
679759
}

ToolGood.Algorithm/ToolGood.Algorithm.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
<RootNamespace>ToolGood.Algorithm</RootNamespace>
2424
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
2525
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
26-
<FileVersion>1.3.1.6</FileVersion>
27-
<Version>1.3.1.6</Version>
26+
<FileVersion>1.3.1.7</FileVersion>
27+
<Version>1.3.1.7</Version>
2828
<PackageReleaseNotes></PackageReleaseNotes>
2929
<Product>ToolGood.Algorithm</Product>
30-
<AssemblyVersion>1.3.1.6</AssemblyVersion>
30+
<AssemblyVersion>1.3.1.7</AssemblyVersion>
3131
</PropertyGroup>
3232

3333
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">

ToolGood.Algorithm/_base/Operand.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ internal bool BooleanValue
158158
{
159159
if (Type == OperandType.NUMBER) {
160160
if (Value is double) {
161-
return (double)Value == 1;
161+
return (double)Value != 0;
162162
}
163-
return decimal.Parse(Value.ToString()) == 1M;
163+
return decimal.Parse(Value.ToString()) != 0;
164164
}
165165
return (bool)Value;
166166
}

0 commit comments

Comments
 (0)