1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // See https://aka.ms/new-console-template for more information
- using Microsoft.CSharp;
- using NCalc;
- using System.CodeDom.Compiler;
- using System.Diagnostics;
- using System.Reflection;
- using System.Text;
- using System.Text.RegularExpressions;
- using Z.Expressions;
- System.Threading.Thread.Sleep(1000);
- //Console.WriteLine(@" 首重 = 0.5,
- // 续重 = 0.5,
- // 称重 = 1.000,
- // 体重 = 2.000,
- // 首重价格 = 100,
- // 续重价格 = 200");
- //string f = "(称重 > 体重 ? 称重 : 体重) > 首重 ? (首重价格 + (称重 > 体重 ? ([(称重 - 首重) / 续重] * 续重价格) : ([(体重 - 首重) / 续重] * 续重价格))): 首重价格";
- //Console.WriteLine($"公式1:{f}");
- //for (int i = 0; i < 5; i++)
- //{
- // Stopwatch all = new Stopwatch();
- // all.Start();
- // System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"(\[.*?\])");
- // var maths = r.Matches(f);
- // if (maths.Count > 0)
- // {
- // foreach (Match math in maths)
- // {
- // f = f.Replace(math.Groups[1].Value, math.Groups[1].Value.Replace("[", "Math.Ceiling(").Replace("]", ")"));
- // }
- // }
- // Console.WriteLine(Eval.Execute(f, new
- // {
- // 首重 = 0.5,
- // 续重 = 0.5,
- // 称重 = i,
- // 体重 = 2.000,
- // 首重价格 = 100,
- // 续重价格 = 200,
- // }));
- // all.Stop();
- // Console.WriteLine(string.Format("Z.Expressions运算符:用时{0}毫秒{1}", all.Elapsed.TotalMilliseconds, 100 * 100));
- //}
- string f3 = "Math.Max(体重,称重)>首重?首重价格+Math.Ceiling((Math.Max(称重 , 体重) - 首重) / 续重) * 续重价格:首重价格";
- //string f3 = "(称重 > 体重 ? 称重 : 体重) > 首重 ? (首重价格 + (称重 > 体重 ? ([(称重 - 首重) / 续重] * 续重价格) : ([(体重 - 首重) / 续重] * 续重价格))): 首重价格";
- Console.WriteLine($"公式2:{f3}");
- for (int i = 0; i < 5; i++)
- {
- Stopwatch all = new Stopwatch();
- all.Start();
- var interpreter = new DynamicExpresso.Interpreter();
- Console.WriteLine(interpreter.Eval(f3, new DynamicExpresso.Parameter[] {
- new DynamicExpresso.Parameter("首重",typeof(double),0.5),
- new DynamicExpresso.Parameter("续重",typeof(double),0.5),
- new DynamicExpresso.Parameter("称重",typeof(double),i),
- new DynamicExpresso.Parameter("体重",typeof(double),2.000),
- new DynamicExpresso.Parameter("首重价格",typeof(double),100),
- new DynamicExpresso.Parameter("续重价格",typeof(double),200),
- }));
- all.Stop();
- Console.WriteLine(string.Format("DynamicExpresso函数:用时{0}毫秒{1}", all.Elapsed.TotalMilliseconds, 100 * 100));
- }
- string f2 = "if(Max(体重,称重)>首重,首重价格+Ceiling((Max(称重 , 体重) - 首重) / 续重) * 续重价格,首重价格)";
- Console.WriteLine("公式3:" + f2);
- for (int i = 0; i < 5; i++)
- {
- Console.WriteLine(i);
- Stopwatch all = new Stopwatch();
- all.Start();
- string f22 = f2
- .Replace("首重价格", 100.ToString())
- .Replace("续重价格", 200.ToString())
- .Replace("首重", 0.5.ToString())
- .Replace("续重", 0.5.ToString())
- .Replace("称重", i.ToString())
- .Replace("体重", 2.000.ToString());
- Expression evaluator = new Expression(f22);
- Console.WriteLine(evaluator.Evaluate());
- all.Stop();
- Console.WriteLine(string.Format("NCalc.函数计算:用时{0}毫秒{1}", all.Elapsed.TotalMilliseconds, 100 * 100));
- }
- Console.Read();
- //(称重 > 体重 ? 称重 : 体重) > 首重 ? (首重价格 + (称重 > 体重 ? ([(称重 - 首重) / 续重] * 续重价格) : ([(体重 - 首重) / 续重] * 续重价格))): 首重价格
|