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.Parse
或decimal.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。