C#语句文本框总和

时间:2011-02-14 13:19:01

标签: c# visual-studio

我试图将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);

4 个答案:

答案 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.Parsedecimal.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。