繁体   English   中英

将 2 个文本框值相乘并显示在第三个文本框中

[英]Multiply 2 textbox values and display in 3rd textbox

我试图将 2 个数字(每个文本框中一个)相乘并显示在另一个文本框中当我输入数字时,没有任何反应。 textBox8 显示“2.50”,textBox 10 显示“5”。

private void textBox8_TextChanged(object sender, EventArgs e)
        {
            Multiply();
        }

        private void textBox10_TextChanged(object sender, EventArgs e)
        {
            Multiply();
        }

        public void Multiply()
        {
            int a, b;

            bool isAValid = int.TryParse(textBox8.Text, out a);
            bool isBValid = int.TryParse(textBox10.Text, out b);

            if (isAValid && isBValid)
                textBox7.Text = (a * b).ToString();

            else
                textBox7.Text = "Invalid input";
        }

使用double.TryParse

double a, b;

bool isAValid = double.TryParse(textBox8.Text.Trim(), out a);
bool isBValid = double.TryParse(textBox10.Text.Trim(), out b);

if (isAValid && isBValid)
    textBox7.Text = (a * b).ToString();

else
    textBox7.Text = "Invalid input";

The numbers in textBox8 are (for example) 2.50, and textBox 10 is 2

2.50是十进制值,无法解析为int

int.TryParse更改为decimal.TryParse

 int a, b;

 bool isAValid = int.TryParse(textBox8.Text, out a);
 bool isBValid = int.TryParse(textBox10.Text, out b);

 decimal a, b;

 bool isAValid = decimal.TryParse(textBox1.Text, out a);
 bool isBValid = decimal.TryParse(textBox2.Text, out b);

textBox8 中的数字为(例如)2.50,textBox 10 中的数字为 2。

Int32.TryParse(String s, out int)重载使用NumberStyle.IntegerCurrentCulture属性。 这就是为什么您的2.50失败并且isAValid将为false 使用NumberStyle.Integer ,您的字符串只能有;

  • 领先的空白。
  • 尾随空白。
  • 领先的正号或负号。

这就是为什么isAValid && isBValid将是false (无论isBValid是什么)并且您的else 语句有效。

作为解决方案,您可以使用Double.TryParse方法,它使用NumberStyles.Float| NumberStyles.AllowThousands NumberStyles.Float| NumberStyles.AllowThousandsCurrentCulture类似;

double a;
bool isAValid = Double.TryParse(textBox8.Text, out a);

这应该有效:

    private void textBox8_TextChanged(object sender, EventArgs e)
    {
        Multiply();
    }

    private void textBox10_TextChanged(object sender, EventArgs e)
    {
        Multiply();
    }

    public void Multiply()
    {
        float a, b;

        bool isAValid = float.TryParse(textBox8.Text, out a);
        bool isBValid = float.TryParse(textBox10.Text, out b);

        if (isAValid && isBValid)
            textBox7.Text = (a * b).ToString();
        else
            textBox7.Text = "Invalid input";
    }

当然,正如另一个答案所提到的,您可以使用小数或双精度数,这完全取决于您想要的精度:
float : 单精度浮点数(32 位)。
double :双精度浮点数(64 位)。
十进制:128 位浮点数。

此致!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM