我试图将3个文本框中的值与以下语句相加,但是我似乎无法使其正常工作。 3个文本框的值显示为十进制。错误:mscorlib.dll中发生未处理的“System.FormatException”类型异常附加信息:输入字符串的格式不正确。
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);
答案 0 :(得分:3)
问题中的细节不够,但我的直觉告诉我这是问题:
您在文本框中有内容,如 40,5 ,但计算机当前文化的小数分隔符设置为。(点)。因此,在将40,5转换为小数时会出现异常,因为它不理解,。
可能是另一种方式,你正在写40.5,但它期望得到40.5。
修改强>
我看到 Florian von Spiczak 回答的评论,似乎字符$出现在文本框中。如果是,那显然是个问题。
尝试使用textBox.Text
替换Convert.ToDecimal
来电中的所有textBox.Text.Replace("$","")
。这应该摆脱$并使其正确解析。
所以完整的代码应该是:
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
,并在文本框中实际写入的内容上添加一些验证逻辑。
答案 1 :(得分:2)
而不是Convert.ToDecimal尝试:
decimal dec1;
if (!Decimal.TryParse(SSubTotalTextBox.Text, dec1)
{
MessageBox.Show("Error trying to convert to a decimal: " + SSubTotalTextBox.Text);
}
这应该可以帮助您找出文本框输入的错误。
答案 2 :(得分:2)
最好的方法是使用decimal.TryParse()方法,然后你可以做一些验证。 MSDN:Decimal.TryParse Method (String, Decimal)
答案 3 :(得分:0)
您是否在所有文本框中输入了值?转换可能不喜欢空字符串。您也可以尝试decimal.Parse或decimal.TryParse而不是Convert。
编辑:我认为文化不是问题。即使它以6,4输入并且文化期望为6.4,通常也会被解释为千分隔符,并且将导致64而不是6.4。