【问题标题】:Add three numbers with textBox用文本框添加三个数字
【发布时间】:2011-08-31 06:13:42
【问题描述】:

我有一个 textbox1 两个和三个。在 textbox1 数字 0、2 数字 1 和 3 数字 2 并使用此代码

textBox4.Text = "" + 
  (int.Parse(textBox1.Text) + 
  (int.Parse(textBox2.Text + 
  (int.Parse(textBox3.Text)))));

但结果是 012..你可以拥有全部数量,3?

【问题讨论】:

  • ...问题在哪里?所以基本上你在这里得到字符串的总和: (textBox2.Text + (int.Parse(textBox3.Text) ,它是“12”,然后你将它解析为 int (12) 并与 0 -> 12 相加,然后你用“”求和得到“12”。所以你的结果不是“012”,你的结果是“12”,如果你想对整数求和,那么你需要在求和之前解析。

标签: c# visual-studio-2010 add


【解决方案1】:
int result = 
  int.Parse(textBox1.Text) + 
  int.Parse(textBox2.Text) + 
  int.Parse(textBox3.Text);
textBox4.Text = result.ToString();

试试这个

【讨论】:

  • 如果 1 个文本框为空,此代码将给出错误.. 我们如何让用户保持文本框为空
  • 求和前检查:if (!string.IsNullOrWhiteSpace(textBox1.Text))
【解决方案2】:

这里发生的情况是从左到右计算总和,这导致执行的加法类型与您预期的不同。在 C# 中,您可以添加两个字符串。如果您将"foo" 添加到"bar",那么这将为您提供字符串"foobar"。如果你将一个字符串和一个数字相加,那么它会将数字转换为一个字符串并将两个字符串相加。所以"foo"+13 产生"foo13"

因此,您的示例中发生的事情非常复杂。从内部开始,您拥有:int.Parse(textBox3.Text)。这需要textBox3.Text,即"2",并将其转换为数字2。接下来您执行textBox2.Text + (int.Parse(textBox3.Text),它获取字符串"1",然后将数字2 添加到其中。这导致数字2 转换为字符串"2",然后添加"1"+"2",给出字符串"12" 作为答案,因为字符串是通过加入它们来添加的。接下来您执行int.Parse(textBox2.Text + (int.Parse(textBox3.Text)),它将字符串"12" 转换为数字12。您还可以使用int.Parse(textBox1.Text) 给出数字0。所以此时您要添加"" + 0 + 12。它从左到右执行此操作,首先将"" 添加到0。这会导致0 被转换为"0""" + "0""0"。然后我们添加"0" + 12。当我们这样做时,12 被转换为"12" 并且"0"+"12" 得到"012"

无需进行大的更改,只需更改括号即可获得正确的结果。如果在将其中任何一个数字添加到字符串之前将所有数字加在一起,那么您将得到正确的结果。我们可以用括号来完成。

textBox4 = "" + (int.Parse(textBox1.Text) + int.Parse(textBox2.Text) + int.Parse(textBox3.Text));

简而言之,关注发生的顺序和类型非常重要,因为添加两个字符串与添加两个数字完全不同。

【讨论】:

    【解决方案3】:

    将 " 标记放在末尾,这样它首先会进行常规数学运算,然后是字符串转换。

    【讨论】:

      【解决方案4】:

      你可以这样:

      int sum=int.Parse(textBox1.Text) + int.Parse(textBox2.Text) + int.Parse(textBox3.Text);
      textBox4.Text = String.Format("{0}",sum);
      

      【讨论】:

      【解决方案5】:

      这里有 2 个问题。第一个是开头的“”。当您执行第一个 + 时,首先解析 textBox1.Text,然后通过字符串连接运算符再次转换为字符串。我更喜欢这样的:

      textBox4.Text = (int.Parse(textBox1.Text) + int.Parse(textBox2.Text) + int.Parse(textBox3.Text)).ToString();
      

      第二个问题(真正的问题)是您错过了 textBox2.Text 之后的右括号。通过这种方式,您首先连接 textBox1.Text ("1") 和 int.Parse(textBox2.Text).ToString() ("2"),并且仅在此时您解析结果。如果括号没有丢失,您的代码将给出“3”而不是“012”

      【讨论】:

      • Ogni tanto un italiano grazie per la risposta =)
      • Già che ci siamo, se non hai messo vincoli sulle TextBox io userei TryParse al posto di Parse, così sei sicuro di non Generare eccezioni
      • ma non mi conviene ho la somma che si trova gia sotto un try e un if purtroppo è una questione difficile da spiegare
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多