C#如何在Windows窗体应用程序中的字符串内部进行基本数学运算

时间:2017-07-27 03:45:56

标签: c# visual-studio-2017

这对很多人来说似乎很简单,我通常会自己学习这些东西,但我需要一些帮助。我需要在不同的文本框中添加2个或更多数字的值,例如,如果有人输入" 5"在一个盒子里" 5"在另一个然后点击一个按钮,将进行数学运算。总而言之,我需要的是在需要时在字符串中完成数学运算。我可能只需要知道代码就可以了。从我研究和试图找出的内容来看,我认为与Convert.ToInt32())或某些事情有关。它必须是这样的字符串:

if (textBox1.Text == string.Empty && textBox2.Text == string.Empty && textBox3.Text == string.Empty && textBox4.Text == string.Empty)
{
    MessageBox.Show("All fields are empty, try again!");
}
else if (textBox1.Text != string.Empty && textBox2.Text != string.Empty && textBox3.Text != string.Empty && textBox4.Text != string.Empty)
{
    string a = textBox1.Text;
    string b = textBox2.Text;
    string c = textBox3.Text;
    string d = textBox4.Text;

    if (txtmessagechanged != null)
        txtmessagechanged("Your total is ", null);
}

所以这是我的程序中的一些示例文本,我的问题是我真正需要的是知道我键入什么来做几乎基本的加法和减法以及用户可以从另一个静态菜单中选择的百分比增加25%或增加5%。如果需要澄清,请告诉我,谢谢。

4 个答案:

答案 0 :(得分:2)

如果您事先知道什么样的价值,可以使用适当的int.TryParse long.TryParse double.TryParse等。如果您不确定号码的类型,请使用安全号码(double.TryParse)。如果您对货币内容感兴趣,可以使用decimal那么您可能会寻找以下内容:

int parsedInt;
if(int.TryParse(textBox.Text, out parsedInt)==true){
    //Now parsedInt is a number you can do math
}
else{
    //Entered text can not be parsed :(
    //Warn user??
}

答案 1 :(得分:1)

数学计算总是需要数字类型(如int,flaot,---)。所以你需要将字符串转换为其中一种类型。您投射的类型取决于预期的输入。如果用户只输入整数,则整数是完美的。用户输入浮点数时应使用float(或类似)。解析本身可以通过许多不同的方式完成。但在这种情况下,很可能是用户没有输入可以解析的数字,因此你应该尝试解析字符串(这也会产生正确的结果):

if (textBox1.Text == string.Empty && textBox2.Text == string.Empty && textBox3.Text == string.Empty && textBox4.Text == string.Empty)
        {
            MessageBox.Show("All fields are empty, try again!");
        }
        else if (textBox1.Text != string.Empty && textBox2.Text != string.Empty && textBox3.Text != string.Empty && textBox4.Text != string.Empty)
        {
            string a = textBox1.Text;
            string b = textBox2.Text;
            string c = textBox3.Text;
            string d = textBox4.Text;

            if (txtmessagechanged != null)
            {                
                int ai = 0;
                int bi = 0;
                int ci = 0;
                int di = 0;

                if(int.TryParse(a, out ai) && int.TryParse(b, out bi) && int.TryParse(c, out ci) && int.TryParse(d, out di))
                {
                    int result = ai + bi + ci + di;
                    txtmessagechanged("Your total is " + result.ToString(), null);
                }           
            }

    }

在C#版本7中,您不必在TryParse中声明使用它们的int变量:

if (txtmessagechanged != null)
{                    
    if(int.TryParse(a, out int ai) && int.TryParse(b, out int bi) && int.TryParse(c, out int ci) && int.TryParse(d, out int di))
    {
         int result = ai + bi + ci + di;
         txtmessagechanged("Your total is " + result.ToString(), null);
    }           
}

答案 2 :(得分:0)

假设输入的值是数字,并且不包含无效字符,您可以使用

将它们转换为十进制
decimal val_a = Convert.ToDecimal(a);
decimal val_b = Convert.ToDecimal(b);

简单地添加或减去:

decimal result = val_a + val_b
decimal result = val_a - val_b

乘以或除:

decimal result = val_a * val_b
decimal result = val_a / val_b

对于百分比增长,我猜你可以这样做:

decimal result = (val_b - val_a) / val_a * 100

(然后明显地围绕它,转换.ToString()并将'%'连接到最后。)

答案 3 :(得分:0)

基本上你需要至少有一个有效的十进制输入文本框,其他的可以是空的,但不能无效。如果它被验证 - 做数学。然后我假设,你将有一个按钮添加或减少。并且组合框的默认选择值为0.如果按下是添加,则设置bool add为true,如果是substract则将其设置为false。

 public decimal Caulculate(decimal number1=0, decimal number2=0, decimal number3=0, decimal number4=0, bool add=true, decimal percentage=0)
    {
        decimal result=0;
        if(add)
        {
            result = number1 + number2 + number3 + number4;
        }
        if(!add)
        {
            result = number1 - number2 - number3 - number4;
        }
        if(percentage != 0)
        {
            result = Percentage(result,percentage);
        }
        return result;

    }
    public decimal Percentage(decimal number1,decimal percentage)
    {
        return number1+(number1 * (percentage / 100));
    }

验证检查它是否为空,返回0,如果无效则返回null

 public decimal? Validate (string input)
    {
        decimal number;
        if (string.IsNullOrEmpty(input))
            return 0;
        if (decimal.TryParse(input, out number))
            return number;
        else return null;

    }

处理添加或减去按钮

 private void Start(bool add)
    {

        DoMath math = new DoMath();
        decimal? number1 = math.Validate(textBox1.Text);
        decimal? number2 = math.Validate(textBox2.Text);
        decimal? number3 = math.Validate(textBox3.Text);
        decimal? number4 = math.Validate(textBox4.Text);

        decimal? number5 = math.Validate(comboBox1.SelectedItem.ToString());

        if (number1 != null &&
            number2 != null &&
             number3 != null &&
            number4 != null)
        {
            label1.Text = math.Caulculate(number1.Value, number2.Value, number3.Value, number4.Value, add, number5.Value).ToString();

        }
        else
        {
            label1.Text = "There is validation error in texbox(es)";
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Start(true);
    }


    private void button2_Click(object sender, EventArgs e)
    {
        Start(false);
    }