C# 将字符串转换为保留精确输入格式的十进制
我相信这是小菜一碟,但我真的在为一些看似琐碎的事情而挣扎 我需要检查表单提交上文本框的输入文本,并检查它是否在所需的范围内(我尝试了范围验证器,但由于某种原因它不起作用,所以我尝试在服务器端执行此操作) 我想做的是: 获取输入的值(例如0.02),替换逗号和句点,将其转换为十进制(或双精度或等效值),并检查其是否在0.10和35000.00之间 以下是我目前掌握的情况:C# 将字符串转换为保留精确输入格式的十进制,c#,C#,我相信这是小菜一碟,但我真的在为一些看似琐碎的事情而挣扎 我需要检查表单提交上文本框的输入文本,并检查它是否在所需的范围内(我尝试了范围验证器,但由于某种原因它不起作用,所以我尝试在服务器端执行此操作) 我想做的是: 获取输入的值(例如0.02),替换逗号和句点,将其转换为十进制(或双精度或等效值),并检查其是否在0.10和35000.00之间 以下是我目前掌握的情况: string s = txtTransactionValue.Text.Replace(",", string.Empty).
string s = txtTransactionValue.Text.Replace(",", string.Empty).Replace(".", string.Empty);
decimal transactionValue = Decimal.Parse(s);
if (transactionValue >= 0.10M && transactionValue <= 35000.00M) // do something
string s=txtTransactionValue.Text.Replace(“,”,string.Empty).Replace(“.”,string.Empty);
decimal transactionValue=decimal.Parse;
如果(transactionValue>=0.10M&&transactionValue您要将“.”替换为零,那么您的输入将从“0.02”变为“002”,解析为2.0
为什么要替换逗号和句点(小数点)?您正在用String.Empty替换任何出现的“.”或“.”,结果是一个根本没有分隔符的字符串。最好将decimal.Parse()
或decimal.TryParse()
与相应的CultureInfo和NumberStyles一起使用。您正在替换“点”。这意味着“0.02”将是“002”,其解析方式类似于“2”
只是不要替换“点”。我认为替换逗号是没有必要的。正如其他人已经提到的那样,你扔掉了点和逗号。也许你这样做,因为根据用户的语言,你有一些问题,因为在不同的文化中,点和逗号有不同的含义
因此,如果您了解用户的语言,您可以尝试其中一种:
decimal value = Decimal.Parse("0.02", CultureInfo.GetCultureInfo("en-US"));
decimal value = Decimal.Parse("0,02", CultureInfo.GetCultureInfo("de-DE"));
您还可以制作一个简单的方法来考虑所需的CultureInfo和NumberStyles。
以下是我的建议:
public decimal ParseDecimal(string input)
{
CultureInfo cultureInfo = null;
NumberStyles style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
decimal value = 0;
string[] userLanguages = HttpContext.Current.Request.UserLanguages;
if (userLanguages.Length > 0)
{
cultureInfo = new CultureInfo(userLanguages[0]);
Decimal.TryParse(input, style, cultureInfo, out value);
}
return value;
}
我会使用Decimal.Parse(“0.02”,CultureInfo.InvariantCulture)
,但这只有在您将
用作观众时才有效。
为了确保不会出现任何错误,您应该在解析数据之前始终验证数据
Decimal.Parse
似乎会忽略未知字符,而其他Parse
函数会抛出异常。谢谢!我正在对字符串进行替换,因为提交时我需要将199.99作为19999传递到web服务中。再次!