2011-02-14 42 views
3

我想用下面的语句总结3个文本框的值,但我似乎无法使它工作。 3个文本框的值显示为十进制。错误:mscorlib.dll中发生未处理的类型为'System.FormatException'的异常其他信息:输入字符串格式不正确。C#声明文本框总和

 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

你得到的错误是什么? – oopbase 2011-02-14 13:20:06

+0

mscorlib.dll中发生未处理的“System.FormatException”类型异常 附加信息:输入字符串格式不正确。 – pacheco 2011-02-14 13:20:34

+0

你能给出一个文本框的示例内容吗? – 2011-02-14 13:21:32

回答

3

它没有足够的细节问题,但我的直觉告诉我,这就是问题所在:

你有一个像40,5在文本框中的内容,但电脑当前文化有小数点分隔符设为。(点)。因此,在将40,5转换为小数时会得到一个异常,因为它不理解,。

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

编辑

我看到弗洛里安·冯·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; 

此外,你应该用decimal.Parsedecimal.TryParse更换Convert.ToDecimal,并添加对什么是你的文本框里面竟写了一些验证逻辑。

0

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

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

2

相反Convert.ToDecimal试试:

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

这应该帮助你找出什么地方错了你的文本框的输入。