【问题标题】:Calculations wrong计算错误
【发布时间】:2017-05-11 11:05:39
【问题描述】:

我正在尝试创建一个简单的 C# 计算器来娱乐。我遇到了一个问题,计算器给了我错误的结果,我找不到我的代码有什么问题。

例如,如果尝试计算以下计算 15+12 它给我的结果是 30 而不是 27 这是正确的回答。

这是我的代码;任何帮助将不胜感激,因为我对编码很陌生。

namespace Calculator
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            resultBox.Text += "=";
        }

        //Function Add
        private void button_add_Click(object sender, RoutedEventArgs e)
        {
            funcBox.Clear();
            funcBox.Text += "+";
        }

        //Function Subtract
        private void button_subtract_Click(object sender, RoutedEventArgs e)
        {
            funcBox.Clear();
            funcBox.Text += "-";
        }

        //Function Multiply
        private void button_mult_Click(object sender, RoutedEventArgs e)
        {
            funcBox.Clear();
            funcBox.Text += "*";
        }

        //Function Divide
        private void button_div_Click(object sender, RoutedEventArgs e)
        {
            funcBox.Clear();
            funcBox.Text += "/";
        }


        //Clear button
        private void button_clear_Click(object sender, RoutedEventArgs e)
        {
            numBox1.Clear();
            numBox2.Clear();
            funcBox.Clear();
            resultBox.Clear();
            resultBox.Text += "= ";  
        }

        private void getResult(object sender, RoutedEventArgs e)
        {
            //Check if the both numboxes and funcbox contains something
            if (numBox1.Text.Length > 0 && numBox2.Text.Length > 0)
            {
                if (funcBox.Text.Length > 0)
                {
                    resultBox.Clear();
                    resultBox.Text += "= ";

                    decimal num1 = decimal.Parse(numBox1.Text);
                    decimal num2 = decimal.Parse(numBox1.Text);

                    decimal result = CalculateResult(num1, num2);
                    resultBox.Text += result;
                }
                else
                {
                    MessageBox.Show("No function selected.", "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            else
            {
                MessageBox.Show("You can't leave empty fields.", "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
            }

        }

        //Calculate the result
        public decimal CalculateResult(decimal num1, decimal num2)
        {
            decimal res = 0;

            if (funcBox.Text == "+")
            {
                res = num1 + num2;
            }
            else if (funcBox.Text == "-")
            {
                res = num1 - num2;
            }
            else if (funcBox.Text == "*")
            {
                res = num1 * num2;
            }
            else if (funcBox.Text == "/")
            {
                res = num1 / num2;
            }

            return res;
        }
    }
}

【问题讨论】:

  • 使用调试器,卢克!
  • 试试:resultBox.Text += result.ToString();
  • 十进制 num1 = decimal.Parse(numBox1.Text);十进制 num2 = decimal.Parse(numBox1.Text);因此 15+15 = 30

标签: c# decimal calculator


【解决方案1】:

您正在为 num1num2 分配相同的值

decimal num1 = decimal.Parse(numBox1.Text);
decimal num2 = decimal.Parse(numBox1.Text);<- here is the issue, change to numBox2 instead

【讨论】:

    【解决方案2】:

    我认为你的问题在于这两行:

    decimal num1 = decimal.Parse(numBox1.Text);
    decimal num2 = decimal.Parse(numBox1.Text);
    

    'num' 应该和 numBox2 相关联吧?

    【讨论】:

      【解决方案3】:

      在 getResult 函数中你有一个问题:

      decimal num1 = decimal.Parse(numBox1.Text);
      decimal num2 = decimal.Parse(numBox1.Text);
      

      应该是

      decimal num1 = decimal.Parse(numBox1.Text);
      decimal num2 = decimal.Parse(numBox2.Text);
      

      【讨论】:

        【解决方案4】:

        貌似num1和num2是同时解析的:

        decimal num1 = decimal.Parse(numBox1.Text);
        decimal num2 = decimal.Parse(numBox1.Text); // Parses same text
        

        应该是:

        十进制 num1 = decimal.Parse(numBox1.Text);

        十进制 num2 = decimal.Parse(numBox2.Text);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多