Program.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // See https://aka.ms/new-console-template for more information
  2. using Microsoft.CSharp;
  3. using NCalc;
  4. using System.CodeDom.Compiler;
  5. using System.Diagnostics;
  6. using System.Reflection;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. using Z.Expressions;
  10. System.Threading.Thread.Sleep(1000);
  11. //Console.WriteLine(@" 首重 = 0.5,
  12. // 续重 = 0.5,
  13. // 称重 = 1.000,
  14. // 体重 = 2.000,
  15. // 首重价格 = 100,
  16. // 续重价格 = 200");
  17. //string f = "(称重 > 体重 ? 称重 : 体重) > 首重 ? (首重价格 + (称重 > 体重 ? ([(称重 - 首重) / 续重] * 续重价格) : ([(体重 - 首重) / 续重] * 续重价格))): 首重价格";
  18. //Console.WriteLine($"公式1:{f}");
  19. //for (int i = 0; i < 5; i++)
  20. //{
  21. // Stopwatch all = new Stopwatch();
  22. // all.Start();
  23. // System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"(\[.*?\])");
  24. // var maths = r.Matches(f);
  25. // if (maths.Count > 0)
  26. // {
  27. // foreach (Match math in maths)
  28. // {
  29. // f = f.Replace(math.Groups[1].Value, math.Groups[1].Value.Replace("[", "Math.Ceiling(").Replace("]", ")"));
  30. // }
  31. // }
  32. // Console.WriteLine(Eval.Execute(f, new
  33. // {
  34. // 首重 = 0.5,
  35. // 续重 = 0.5,
  36. // 称重 = i,
  37. // 体重 = 2.000,
  38. // 首重价格 = 100,
  39. // 续重价格 = 200,
  40. // }));
  41. // all.Stop();
  42. // Console.WriteLine(string.Format("Z.Expressions运算符:用时{0}毫秒{1}", all.Elapsed.TotalMilliseconds, 100 * 100));
  43. //}
  44. string f3 = "Math.Max(体重,称重)>首重?首重价格+Math.Ceiling((Math.Max(称重 , 体重) - 首重) / 续重) * 续重价格:首重价格";
  45. //string f3 = "(称重 > 体重 ? 称重 : 体重) > 首重 ? (首重价格 + (称重 > 体重 ? ([(称重 - 首重) / 续重] * 续重价格) : ([(体重 - 首重) / 续重] * 续重价格))): 首重价格";
  46. Console.WriteLine($"公式2:{f3}");
  47. for (int i = 0; i < 5; i++)
  48. {
  49. Stopwatch all = new Stopwatch();
  50. all.Start();
  51. var interpreter = new DynamicExpresso.Interpreter();
  52. Console.WriteLine(interpreter.Eval(f3, new DynamicExpresso.Parameter[] {
  53. new DynamicExpresso.Parameter("首重",typeof(double),0.5),
  54. new DynamicExpresso.Parameter("续重",typeof(double),0.5),
  55. new DynamicExpresso.Parameter("称重",typeof(double),i),
  56. new DynamicExpresso.Parameter("体重",typeof(double),2.000),
  57. new DynamicExpresso.Parameter("首重价格",typeof(double),100),
  58. new DynamicExpresso.Parameter("续重价格",typeof(double),200),
  59. }));
  60. all.Stop();
  61. Console.WriteLine(string.Format("DynamicExpresso函数:用时{0}毫秒{1}", all.Elapsed.TotalMilliseconds, 100 * 100));
  62. }
  63. string f2 = "if(Max(体重,称重)>首重,首重价格+Ceiling((Max(称重 , 体重) - 首重) / 续重) * 续重价格,首重价格)";
  64. Console.WriteLine("公式3:" + f2);
  65. for (int i = 0; i < 5; i++)
  66. {
  67. Console.WriteLine(i);
  68. Stopwatch all = new Stopwatch();
  69. all.Start();
  70. string f22 = f2
  71. .Replace("首重价格", 100.ToString())
  72. .Replace("续重价格", 200.ToString())
  73. .Replace("首重", 0.5.ToString())
  74. .Replace("续重", 0.5.ToString())
  75. .Replace("称重", i.ToString())
  76. .Replace("体重", 2.000.ToString());
  77. Expression evaluator = new Expression(f22);
  78. Console.WriteLine(evaluator.Evaluate());
  79. all.Stop();
  80. Console.WriteLine(string.Format("NCalc.函数计算:用时{0}毫秒{1}", all.Elapsed.TotalMilliseconds, 100 * 100));
  81. }
  82. Console.Read();
  83. //(称重 > 体重 ? 称重 : 体重) > 首重 ? (首重价格 + (称重 > 体重 ? ([(称重 - 首重) / 续重] * 续重价格) : ([(体重 - 首重) / 续重] * 续重价格))): 首重价格