2

基本上,我需要将resulta + resultb + resultc + 之前定义的propertyPrice 加在一起以获得总计,然后在文本框中显示总计。结果a/b/c 是根据propertyPrice * 一个常数计算的,房产价格由用户输入。

我没有尝试捕获就做到了,并且得到了格式异常。

int propertyPrice;

if (Int32.TryParse(propertyPriceTextBox.Text, out propertyPrice))
{
    stateSalesTaxTextBox.Text = (stateSalesTax * propertyPrice).ToString("c");

    if (residentialRadioButton.Checked == true)
        comissionTextBox.Text = (residentialCom * propertyPrice).ToString("c");

    if (commercialRadioButton.Checked == true)
        comissionTextBox.Text = (commercialCom * propertyPrice).ToString("c");

    if (hillsRadioButton.Checked == true)
        countySalesTaxTextBox.Text = (hilssTax * propertyPrice).ToString("c");

    if (pascoRadioButton.Checked == true)
        countySalesTaxTextBox.Text = (pascoTax * propertyPrice).ToString("c");

    if (polkRadioButton.Checked == true)
        countySalesTaxTextBox.Text = (polkTax * propertyPrice).ToString("c");

    decimal resulta;
    decimal resultb;
    decimal resultc;

    try
    {
        resulta = decimal.Parse(countySalesTaxTextBox.Text);
        resultb = decimal.Parse(stateSalesTaxTextBox.Text);
        resultc = decimal.Parse(comissionTextBox.Text);
    }
    catch (FormatException)
    {


    }

    decimal totalPrice = (resulta + resultb + resultc + propertyPrice);
    totalPriceTextBox.Text = totalPrice.ToString("c");  
}
4

5 回答 5

3

您有几个不同的问题:

首先,FormatException发生这种情况是因为您将非数字值传递给该decimal.Parse()方法。你需要检查你的输入。

接下来,在您的示例中,您正在有效地吞下您的异常。它被抛出,catch 时钟捕获它,但由于您在块内不做任何事情,您的代码只是离开 catch 块并继续。因此,您totalPrice仍然使用由于异常而未计算的变量的默认值进行计算。

正如其他人所建议的那样,decimal.TryParse()这是一个更好的选择,因为它不会引发异常。但是您需要决定当其中一个Parse()orTryParse()方法调用失败时要做什么。您要假设结果为零,还是要中止计算?

于 2012-10-06T00:28:56.640 回答
3

使用decimal.TryParse;这将允许您检查字符串是否有效。

decimal resulta;
decimal resultb;
decimal resultc;

if (!decimal.TryParse(countySalesTaxTextBox.Text, out resulta))
{
    //take appropriate action here
}
if (!decimal.TryParse(stateSalesTaxTextBox.Text, out resultb))
{
    //take appropriate action here
}
if (!decimal.TryParse(comissionTextBox.Text, out resultc))
{
    //take appropriate action here
}

我想借此机会建议您更改变量名称:

  • resulta应该countySalesTaxRate
  • resultb应该stateSalesTaxRate
  • resultc应该commissionRate
于 2012-10-06T00:22:33.083 回答
3
decimal resulta = 0;
decimal resultb = 0;
decimal resultc = 0;

decimal.TryParse(countySalesTaxTextBox.Text, out resulta);
decimal.TryParse(stateSalesTaxTextBox.Text, out resultb);
decimal.TryParse(comissionTextBox.Text, out resultc);

如果无法解析该值,它将保持为 0。如果解析成功,TryParse 将返回 true,因此如果您想在解析失败时显示消息,只需检查TryParse == false

于 2012-10-06T00:23:38.933 回答
3

在您遇到文化问题之前,请提供一些额外信息。和 ,

像这样使用 Decimal.TryParse 重载

Decimal.TryParse(countySalesTaxTextBox.Text, NumberStyles.Any, new CultureInfo("en-US"), out resulta);
于 2012-10-06T00:25:58.840 回答
0

尝试:

if (!decimal.TryParse(countySalesTaxTextBox.Text, out resulta)) { /*Resolve issue*/ }
if (!decimal.TryParse(stateSalesTaxTextBox.Text, out resultb)) { /*Resolve issue*/ }
if (!decimal.TryParse(comissionTextBox.Text, out resultc)) { /*Resolve issue*/ }

仔细检查我的变量名和默认值。

于 2012-10-06T00:19:53.763 回答