C# 如何接受字符串以避免计算NetAmount和IVA时出错

C# 如何接受字符串以避免计算NetAmount和IVA时出错,c#,C#,我需要根据TotalAmount自动计算NetAmount和IVA,所有这些都可以正常工作,但最大的问题是当用户在TotalAmount字段中输入错误数字时,出现错误时,程序会自动关闭,而不会终止所有进程。我们需要在字段TotalAmount中也允许字符串或找到接受任何字符的方法 if (field.Name == "InvoiceTotalAmount") { Field total = (Field)field.ParentDocument.Fields["InvoiceTota

我需要根据TotalAmount自动计算NetAmount和IVA,所有这些都可以正常工作,但最大的问题是当用户在TotalAmount字段中输入错误数字时,出现错误时,程序会自动关闭,而不会终止所有进程。我们需要在字段TotalAmount中也允许字符串或找到接受任何字符的方法

if (field.Name == "InvoiceTotalAmount")
  {
    Field total = (Field)field.ParentDocument.Fields["InvoiceTotalAmount"]; //Field Total
    string totaltemp;
    double totaltemp1;
    totaltemp = total.Value;
    totaltemp1 = System.Convert.ToDouble(totaltemp);
    bool isNumeric = double.TryParse("1234567890", out totaltemp1);     
    if (isNumeric == true)
    //if (total.Value != "" )
    {
        Field iva = (Field)field.ParentDocument.Fields["InvoiceVatAmount"]; // IVA
        Field neto = (Field)field.ParentDocument.Fields["InvoiceNetAmount"]; // Netamount   
        double var1;
        double var11;
        string var4;
        var4 = total.Value;

        double var5 = System.Convert.ToDouble(var4);        

        var1 = 0.0087;
        var11 = 0.0013;

        var1 = (var5 * var1);
        var11 = (var5 * var11);

        string var3 = var1.ToString("C");
        string var12 = var11.ToString("C");

        neto.Value = var3;
        iva.Value = var12;

        neto.State = DataState.Ok;
        iva.State = DataState.Ok;
    }
    else
    {
    return false;
    }
}
return false;

根据我上面的评论,您需要使用
Double.TryParse()
从字符串中获取一个Double,而不需要处理异常(在C#中,异常非常昂贵,应该作为正常程序流的一部分加以避免)

下面是你如何使用它

string inputData = "123.456";
//string inputData = "Some invalid data";

double result;
var success = Double.TryParse(inputData, out result);
if (success) {
    // Use result as desired
} else {
    // Failed to parse input string
}
请注意,由于您处理的是财务信息,
double
实际上是错误的类型

浮点数(包括双精度)存在精度问题。这些问题很复杂,与二进制数据存储在内存中表示数字的方式有关。该问题的一些示例可以在

即使您不完全理解,也要确保使用
Decimal
表示货币

幸运的是,Decimal提供了完全相同的
TryParse
方法

decimal result;
var success = Decimal.TryParse(inputData, out result);

一定要读这个话题。这是对这个问题的一个很好的解释。

乍一看很好。您需要捕获异常,调用
ToString
,保存结果并将其粘贴到。是否只接受数字?您好,是的,但如果用户错误输入字符,程序需要承认,以便他可以更正。当前,当用户输入字符时,程序显示错误并关闭automatically@Will你可以把例外放在哪里,你能帮我一下吗。谢谢。好的,首先,在所有代码()周围放置一个try/catch块。这将使您在将来更好地处理异常。也就是说,代码工作不需要异常。您需要
double.TryParse()
()。如果它设法从字符串中读取一个数字并将其存储在提供的变量中,则返回
True
,否则返回false(表示您可以告诉用户)您好,谢谢您的建议。我试着用“decimal.TryParse”并且工作得很好。又是坦斯克。很高兴我能帮上忙。如果这回答了你的问题,请考虑使用左手边的蜱痕。