在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。解析和转换}
任何帮助都是感激的。由于
如果需要实现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();
}
}