static void Main(string[] args)
        {
            try
            {
                var input = args[0];

                Console.WriteLine($"Welcome in Expression Solver!");
                Console.WriteLine($"Your expression is: {input}");

                var expressionCalculator = new ExpressionCalculator();
                var result = expressionCalculator.Calculate(input);

                Console.WriteLine($"Expression has been calculated successfully.");
                Console.WriteLine($"The result is: {result}");

                Console.ReadLine();
            }
            catch (ArgumentException e)
            {
                Console.WriteLine($"Expression is invalid.");
                Console.WriteLine(e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine($"Unrecognized error occured. Error Details:");
                Console.WriteLine(e.Message);
            }
        }
示例#2
0
        /// <summary>
        /// Главный метод программы, с которого начинается выполнение программы
        /// </summary>
        /// <param name="args">массив строк, содержащий аргументы командной строки переданные программе</param>
        private static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();

            watch.Start();
            var    reader     = new ExpressionFileReader();
            string expression = null;

            if (args.Length < 1 || String.IsNullOrEmpty(args[0]))
            {
                Console.WriteLine("Некорректное имя файла");
                Console.ReadKey();
                return;
            }
            try
            {
                expression = reader.ReadExpressionFromFile(args[0]);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.ReadKey();
                return;
            }
            var calculator = new ExpressionCalculator();

            Console.WriteLine(expression + "=" + calculator.Calculate(expression));
            watch.Stop();
            Console.WriteLine("time taken is " + watch.Elapsed.Milliseconds);
            Console.ReadKey();
        }
        public void ValidExpression_Should_Return_IntResult(string input, int expectedResult)
        {
            var calculator = new ExpressionCalculator();

            var result = calculator.Calculate(input);

            Assert.Equal(expectedResult, result.Value);
        }
        public void Calculate_CorrectExpression_ReturnTrue()
        {
            var expression = "2+2";
            var calculator = new ExpressionCalculator();
            var result     = calculator.Calculate(expression);

            Assert.IsTrue(result == 4);
        }
        public void Should_Calculate_Expression(string input, double expected)
        {
            //Act
            var actual = _sut.Calculate(input);

            //Assert
            Assert.AreEqual(expected, Math.Round(actual, 2, MidpointRounding.AwayFromZero));
        }
示例#6
0
        public void CalculateTest()
        {
            string expression = "2+2";
            ExpressionCalculator expressionCalculator = new ExpressionCalculator();
            var res = expressionCalculator.Calculate(expression);

            Assert.AreEqual(4, res);
        }
示例#7
0
        public void ShouldCalculate()
        {
            var expression = "2+2";
            var calculator = new ExpressionCalculator();
            var value      = calculator.Calculate(expression);

            Assert.AreEqual(4, value);
        }
        public void InvalidExpression_Should_Return_AnErrorMessage(string input, bool expectedResult, string errorMessage)
        {
            var calculator = new ExpressionCalculator();

            var result = calculator.Calculate(input);

            Assert.Equal(expectedResult, result.IsError);
            Assert.Equal(errorMessage, result.ErrorText);
        }
示例#9
0
        protected void btnExec_Click(object sender, EventArgs e)
        {
            Stopwatch watch = new Stopwatch();

            watch.Start();
            try
            {
                this.boxResult.Text = ExpressionCalculator.Calculate(this.boxExpr.Text, this.CurrentUser);
            }
            catch (Exception ex)
            {
                this.boxResult.Text = ex.Message;
            }
            this.lblTime.Text = string.Format("用时: {0}ms", watch.ElapsedMilliseconds);
            watch.Stop();
            this.PageEngine.UpdateControlRender(this.boxResult);
            this.PageEngine.UpdateControlRender(this.lblTime);
        }
示例#10
0
        /// <summary>
        /// 将字符串类型的数字转换为double类型,支持中文以及带单位
        /// </summary>
        /// <param name="str"></param>
        /// <param name="doubleResult"></param>
        /// <param name="kouType"></param>
        /// <returns></returns>
        public static bool TryToDouble(string str, out double doubleResult, bool kouType = true)
        {
            doubleResult = 0;
            if (str.IsNullOrWhiteSpace())
            {
                return(false);
            }
            if (!kouType)
            {
                return(double.TryParse(str, out doubleResult));
            }
            //如果有中文的数字,转为阿拉伯数字
            if (ZhNumber.IsContainZhNumber(str))
            {
                str = ZhNumber.ToArabicNumber(str);
            }
            if (!double.TryParse(str, NumberStyles.Float, null, out doubleResult))
            {
                if (NumberConvertor.WebUnitDouble(str, out string parsedStr))
                {
                    str = parsedStr;
                }

                ExpressionCalculator calculator = new ExpressionCalculator();//BUG 没有处理abc等非表达式情况,仍然会认为输入了正确的表达式
                if (str.Contains("上"))
                {
                    str = str.Replace("上", "");                   //乘上、加上等
                }
                if (str.Contains("去"))
                {
                    str = str.Replace("去", "");
                }
                str = str.ReplaceAllFromPairSet(KouStaticData.ZhMathToSymbolMath);
                var result = calculator.Calculate(str)?.ToString();
                if (result != null && result != double.NaN.ToString(CultureInfo.InvariantCulture))
                {
                    return(double.TryParse(result, out doubleResult));
                }
                return(false);
            }
            return(true);
        }
示例#11
0
 /// <summary>
 /// 解析一段表达式
 /// </summary>
 /// <param name="expr"></param>
 /// <returns></returns>
 public string ParseExpr(string expr)
 {
     return(ExpressionCalculator.Calculate(expr, this));
 }
        public void Calculate(string input, decimal expectedResult)
        {
            var result = subject.Calculate(input);

            Assert.That(result, Is.EqualTo(expectedResult));
        }