在c#计算器中使用括号()

本文关键字:计算器 | 更新日期: 2023-09-27 17:49:22

我在做一个简单的计算器。到目前为止,我已经能够成功地在我的计算器中实现一些基本功能。看一下代码

public double num1 { get; set; }
        public double num2 { get; set; }
        public string op { get; set; }
       // public bool checker { get; set; }
        private void ButtonBase_OnClick1(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button1.Content.ToString();
            ShowTextBlock.Text += Button1.Content.ToString();
        }
        private void ButtonBase_OnClick2(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button2.Content.ToString();
            ShowTextBlock.Text += Button2.Content.ToString();
        }
        private void ButtonBase_OnClick3(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button3.Content.ToString();
            ShowTextBlock.Text += Button3.Content.ToString();
        }
        private void ButtonBase_OnClick4(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button4.Content.ToString();
            ShowTextBlock.Text += Button4.Content.ToString();
        }
        private void ButtonBase_OnClick5(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button5.Content.ToString();
            ShowTextBlock.Text += Button5.Content.ToString();
        }
        private void ButtonBase_OnClick6(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button6.Content.ToString();
            ShowTextBlock.Text += Button6.Content.ToString();
        }
        private void ButtonBase_OnClick7(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button7.Content.ToString();
            ShowTextBlock.Text += Button7.Content.ToString();
        }
        private void ButtonBase_OnClick8(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button8.Content.ToString();
            ShowTextBlock.Text += Button8.Content.ToString();
        }
        private void ButtonBase_OnClick9(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button9.Content.ToString();
            ShowTextBlock.Text += Button9.Content.ToString();
        }
        private void ButtonBase_OnClick0(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Button0.Content.ToString();
            ShowTextBlock.Text += Button0.Content.ToString();
        }
        private void ButtonBase_OnClickdot(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Buttondot.Content.ToString();
            ShowTextBlock.Text += Buttondot.Content.ToString();
        }
        private void ButtonBase_OnClickobrac(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Buttonobrac.Content;
            ShowTextBlock.Text += Buttonobrac.Content.ToString();
        }
        private void ButtonBase_OnClickcbrac(object sender, RoutedEventArgs e)
        {
            CalculateTextBlock.Text += Buttoncbrac.Content;
            ShowTextBlock.Text += Buttoncbrac.Content.ToString();
        }

        //private void ButtonBase_OnClickinf(object sender, RoutedEventArgs e)
        //{
        //    CalculateTextBlock.Text += ("0/0").ToString();
        //    ShowTextBlock.Text += "Inf.";
        //}
        private void ButtonBase_OnClickplus(object sender, RoutedEventArgs e)
        {
            //num1 += double.Parse(CalculateTextBlock.Text);
            num1 = Convert.ToDouble(CalculateTextBlock.Text);
            op = "plus";
            CalculateTextBlock.Text = "";
            ShowTextBlock.Text += "+";
        }
        private void ButtonBase_OnClickminus(object sender, RoutedEventArgs e)
        {
            num1 += double.Parse(CalculateTextBlock.Text);
            op = "sub";
            CalculateTextBlock.Text = "";
            ShowTextBlock.Text += "-";
        }
        private void ButtonBase_OnClickmul(object sender, RoutedEventArgs e)
        {
            num1 +=  double.Parse(CalculateTextBlock.Text);
            op = "mul";
            CalculateTextBlock.Text = "";
            ShowTextBlock.Text += "*";
        }
        private void ButtonBase_OnClickdiv(object sender, RoutedEventArgs e)
        {
            num1 += double.Parse(CalculateTextBlock.Text);
            op = "div";
            CalculateTextBlock.Text = "";
            ShowTextBlock.Text += "/";
        }
        private void ButtonBase_OnClickequal(object sender, RoutedEventArgs e)
        {
            switch (op)
            {
                case "plus" :
                    //num2 = num1 + double.Parse(CalculateTextBlock.Text);
                    num2 = num1 + Convert.ToDouble(CalculateTextBlock.Text);
                    break;
                case "sub":
                    num2 = num1 - double.Parse(CalculateTextBlock.Text);
                    break;
                case "mul":
                    num2 = num1*double.Parse(CalculateTextBlock.Text);
                    break;
                case "div":
                    num2 = num1/double.Parse(CalculateTextBlock.Text);
                    break;
            }
            CalculateTextBlock.Text = num2.ToString();
            num1 = 0;
            ShowTextBlock.Text = "";
        }
        private void ButtonBase_OnClickclear(object sender, RoutedEventArgs e)
        {
            num1 = 0;
            num2 = 0;
            ShowTextBlock.Text = "";
            CalculateTextBlock.Text = "";
        }

当我在calculatetextbox中插入括号时,问题发生了。它在解析时抛出FormatException。我能在这里实现BIDMAS吗?

注意:我已经尝试了解析和转换方法{int。解析和转换}

任何帮助都是感激的。由于

在c#计算器中使用括号()

如果需要实现BIDMAS规则和括号,则应该首先解析输入并为每个表达式制作标记。一旦你有了每个令牌,然后按照规则进行计算。

除此之外,这个问题在这里得到解答:动态表达式求值

另一篇关于堆栈溢出的文章也提到了这个

stackoverflow post来回答相同的问题

似乎只是缺少。tostring()转换您的底括号。您在Buttondot中拥有它的内容。内容

private void ButtonBase_OnClickdot(object sender, RoutedEventArgs e)
    {
        CalculateTextBlock.Text += Buttondot.Content.ToString(); //You have it here
        ShowTextBlock.Text += Buttondot.Content.ToString();
    }
    private void ButtonBase_OnClickobrac(object sender, RoutedEventArgs e)
    {
        CalculateTextBlock.Text += Buttonobrac.Content; //Add .ToString() 
        ShowTextBlock.Text += Buttonobrac.Content.ToString();
    }

这应该能解决你的问题。同时,你可以使用编译和在线执行c#来测试代码中缺失的内容。

试试这个:-

<script type="text/javascript">
        function Calculate() {
            var expression = document.getElementById('<%=this.TextBox1.ClientID%>').value;
            var result = eval(expression);
            var hidden = document.getElementById('<%=this.hdfResult.ClientID%>');
            hidden.value = result;
        }
    </script>

和按钮点击事件写这个OnClientClick="Calculate();即调用脚本。有关更多信息,请访问此链接

试试这个

 <form id="Calc" runat="server">
    <div>
    <table border= "4">
    <tr>
    <td>
    <input type="text" name="Input" size="16" '>
    <br />
    </td>
    </tr>
    <tr>
    <td>
    <input type="button" name="one" value=" 1 "  onclick ="Calc.Input.value += '1'" '>
    <input type="button" name="two" value=" 2 " onclick="Calc.Input.value += '2'" '>
    <input type="button" name="three" value=" 3 " onclick="Calc.Input.value += '3'" '>
    <input type="button" name="plus" value=" + " onclick="Calc.Input.value += ' + '" '>
    <br />
    <input type="button" name="four" value=" 4 " onclick="Calc.Input.value += '4'" '>
    <input type="button" name="five" value=" 5 " onclick="Calc.Input.value += '5'" '> 
    <input type="button" name="six" value=" 6 " onclick="Calc.Input.value += '6'" '>
    <input type="button" name="minus" value=" - " onclick="Calc.Input.value += ' - '" '>
    <br />
    <input type="button" name="seven" value=" 7 " onclick="Calc.Input.value += '7'" '>
    <input type="button" name="eight" value=" 8 " onclick="Calc.Input.value += '8'" '>
    <input type="button" name="nine" value=" 9 " onclick="Calc.Input.value += '9'" '>
    <input type="button" name="times" value=" x " onclick="Calc.Input.value += ' * '" '>
    <br />
    <input type="button" name="clear" value=" c " onclick="Calc.Input.value = ''" '>
    <input type="button" name="zero" value=" 0 " onclick="Calc.Input.value += '0'" '>
    <input type="button" name="DoIt" value=" = " onclick="Calc.Input.value = eval(Calc.Input.value)" '>
    <input type="button" name="div" value=" / " onclick="Calc.Input.value += ' / '" '>
    <br />
    </td>
    </tr>
    </table>    </div>
       </form>

@Prajjwal我还用Microsoft Visual Studio Express 2013做了一个简单的Web计算器。这是我的代码。看一看!希望能有所帮助:

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void addButton_Click(object sender, EventArgs e)
    {
        double firstValue = double.Parse(firstTextBox.Text);
        double secondValue = double.Parse(secondTextBox.Text);
        double addValue = firstValue + secondValue;
        resultLabel.Text = addValue.ToString();
    }
    protected void subtractButton_Click(object sender, EventArgs e)
    {
        double firstValue = double.Parse(firstTextBox.Text);
        double secondValue = double.Parse(secondTextBox.Text);
        double addValue = firstValue - secondValue;
        resultLabel.Text = addValue.ToString();
    }
    protected void multiplicationButton_Click(object sender, EventArgs e)
    {
        double firstValue = double.Parse(firstTextBox.Text);
        double secondValue = double.Parse(secondTextBox.Text);
        double addValue = firstValue * secondValue;
        resultLabel.Text = addValue.ToString();
    }
    protected void divideButton_Click(object sender, EventArgs e)
    {
        double firstValue = double.Parse(firstTextBox.Text);
        double secondValue = double.Parse(secondTextBox.Text);
        double addValue = firstValue / secondValue;
        resultLabel.Text = addValue.ToString();
    }
}