C# 将字符串转换为保留精确输入格式的十进制

C# 将字符串转换为保留精确输入格式的十进制,c#,C#,我相信这是小菜一碟,但我真的在为一些看似琐碎的事情而挣扎 我需要检查表单提交上文本框的输入文本,并检查它是否在所需的范围内(我尝试了范围验证器,但由于某种原因它不起作用,所以我尝试在服务器端执行此操作) 我想做的是: 获取输入的值(例如0.02),替换逗号和句点,将其转换为十进制(或双精度或等效值),并检查其是否在0.10和35000.00之间 以下是我目前掌握的情况: string s = txtTransactionValue.Text.Replace(",", string.Empty).

我相信这是小菜一碟,但我真的在为一些看似琐碎的事情而挣扎

我需要检查表单提交上文本框的输入文本,并检查它是否在所需的范围内(我尝试了范围验证器,但由于某种原因它不起作用,所以我尝试在服务器端执行此操作)

我想做的是:

获取输入的值(例如0.02),替换逗号和句点,将其转换为十进制(或双精度或等效值),并检查其是否在0.10和35000.00之间

以下是我目前掌握的情况:

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服务中。再次!