C# 如何接受字符串以避免计算NetAmount和IVA时出错
我需要根据TotalAmount自动计算NetAmount和IVA,所有这些都可以正常工作,但最大的问题是当用户在TotalAmount字段中输入错误数字时,出现错误时,程序会自动关闭,而不会终止所有进程。我们需要在字段TotalAmount中也允许字符串或找到接受任何字符的方法C# 如何接受字符串以避免计算NetAmount和IVA时出错,c#,C#,我需要根据TotalAmount自动计算NetAmount和IVA,所有这些都可以正常工作,但最大的问题是当用户在TotalAmount字段中输入错误数字时,出现错误时,程序会自动关闭,而不会终止所有进程。我们需要在字段TotalAmount中也允许字符串或找到接受任何字符的方法 if (field.Name == "InvoiceTotalAmount") { Field total = (Field)field.ParentDocument.Fields["InvoiceTota
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”并且工作得很好。又是坦斯克。很高兴我能帮上忙。如果这回答了你的问题,请考虑使用左手边的蜱痕。