C#语句文本框总和

我试图用以下语句将3个文本框中的值相加,但是我似乎无法使它工作。 3个文本框的值显示为十进制。 错误:mscorlib.dll中发生未处理的“System.FormatException”类型exception附加信息:输入字符串的格式不正确。

decimal num1, num2, num3, total; num1 = Convert.ToDecimal(SSubTotalTextBox.Text); num2 = Convert.ToDecimal(SubTotalMTextBox.Text); num3 = Convert.ToDecimal(SubTotalTextBox3.Text); total = num1 + num2 + num3; TotalAmountTextBox.Text = Convert.ToString(total); 

问题中的细节不够,但我的直觉告诉我这是问题所在:

您在文本框中的内容如40,5 ,但计算机当前文化的小数分隔符设置为。(点) 。 因此,在将40,5转换为小数时会出现exception,因为它不明白,。

它可能是另一种方式,你正在写40.5,但它期望得到40.5。

编辑

我看到Florian von Spiczak回答的评论,似乎字符$出现在文本框中。 如果是,那显然是个问题。

尝试使用textBox.Text.Replace("$","")替换Convert.ToDecimal调用中的所有textBox.Text 。 这应该摆脱$并使其正确解析。

那么完整的代码应该是:

 decimal num1, num2, num3, total; num1 = Convert.ToDecimal(SSubTotalTextBox.Text.Replace("$","")); num2 = Convert.ToDecimal(SubTotalMTextBox.Text.Replace("$","")); num3 = Convert.ToDecimal(SubTotalTextBox3.Text.Replace("$","")); total = num1 + num2 + num3; TotalAmountTextBox.Text = "$ "+ total; 

此外,您应该将Convert.ToDecimal替换为decimal.Parsedecimal.TryParse ,并在文本框中实际写入的内容上添加一些validation逻辑。

而不是Convert.ToDecimal尝试:

  decimal dec1; if (!Decimal.TryParse(SSubTotalTextBox.Text, dec1) { MessageBox.Show("Error trying to convert to a decimal: " + SSubTotalTextBox.Text); } 

这应该可以帮助您找出文本框输入的错误。

最好的方法是使用decimal.TryParse()方法,然后你可以做一些validation。 MSDN: Decimal.TryParse方法(字符串,十进制)

您是否在所有文本框中输入了值? 转换可能不喜欢空字符串。 您也可以尝试decimal.Parse或decimal.TryParse而不是Convert。

编辑:我认为文化不是一个问题。 即使它以6,4输入并且文化预期为6.4,通常也会被解释为千分隔符,并且将导致64而不是6.4。