【问题标题】:C# Statement Textboxes SumC# 语句文本框总和
【发布时间】:2012-09-18 14:58:43
【问题描述】:

我正在尝试将 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);

【问题讨论】:

  • 在 mscorlib.dll 中出现“System.FormatException”类型的未处理异常附加信息:输入字符串的格式不正确。
  • 你能给出其中一个文本框的示例内容吗?
  • 那么您使用的格式是什么?您输入的是:“23,11”还是“23.11”?
  • 哦,我希望 TotalAmountTextBox.Text 显示 3 个文本框 SSubTotalTextBox、SubTotalMTextBox 和 SubTotalTextBox3 总和的结果
  • Forlan07 指的是您的区域设置。您使用 ,(逗号)还是 . (点)作为小数分隔符?

标签: c# visual-studio


【解决方案1】:

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

您在文本框中有 40,5 之类的内容,但计算机当前文化的小数分隔符设置为 .(dot)。因此,将 40,5 转换为小数时会出现异常,因为它不理解 ,。

反之亦然,您正在编写 40.5,但它预计会得到 40.5。

编辑

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

尝试将Convert.ToDecimal 调用中的所有textBox.Text 替换为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,并对文本框中实际写入的内容添加一些验证逻辑。

【讨论】:

    【解决方案2】:

    代替 Convert.ToDecimal 试试:

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

    这应该可以帮助您找出文本框的输入有什么问题。

    【讨论】:

      【解决方案3】:

      最好的方法是使用 decimal.TryParse() 方法,然后你可以做一些验证。 MSDN:Decimal.TryParse Method (String, Decimal)

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 试过十进制。解析但无济于事。如果我将 'decimal' 更改为 'string' 我的总文本框似乎得到了 3 个值的字符串,即 $5.00 + $10.00 + $30.00 但它没有将 3 个值相加。
        • @pacheco 好吧,您正在尝试将“$5.00”字符串转换为小数。那是行不通的。相反,请查看文本框对象 (SSubTotalTextBox.Value ?) 的哪个属性为您提供输入的值,而不是也包含“$”符号的文本。
        • 你试过这样吗? ` 十进制 num1, num2, num3, 总计; decimal.TryParse(SSubTotalTextBox.Text, out num1); decimal.TryParse(SubTotalMTextBox.Text, out num2); decimal.TryParse(SubTotalTextBox.Text, out num3);总计 = 数字 1 + 数字 2 + 数字 3; TotalAmountTextBox.Text = Convert.ToString(total); `
        • 忽略了 $ ... doh 删除 curreny 符号或者你可以使用 tryparse 的高级重载,在那里你可以准确地指定允许的内容和其中的 cultrue:msdn.microsoft.com/en-us/library/ew0seb73.aspx
        • 好的,谢谢大家,我需要这个来在表格中插入值。但是,是的,我同意需要进行一些验证
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        相关资源
        最近更新 更多