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

时间:2010-06-10 10:13:37

标签: c#

我确信这是小菜一碟,但我真的在努力寻找看似微不足道的东西。

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

我想做的是:

获取输入的值(例如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

如果我将0.02传递到上面,则transactionValue为2.我想将值保留为0.02(即不对其进行格式更改 - 100.00为100.00,999.99为999.99)

有什么想法吗?

提前致谢, 布雷特

6 个答案:

答案 0 :(得分:3)

您正在替换任何出现的“。”或者使用String.Empty“,”生成一个根本没有分隔符的字符串。最好使用decimal.Parse()decimal.TryParse()与适当的CultureInfo和NumberStyles。

答案 1 :(得分:2)

你正在替换“。”什么都没有,所以你的输入从“0.02”变为“002”,它将解析为2.0。

为什么要替换逗号和句点(小数点)?

答案 2 :(得分:1)

正如其他人已经提到的那样,你扔掉了点和逗号。也许你这样做,因为你有一些问题取决于用户的语言,因为在不同的文化中,点和逗号有不同的含义。

因此,如果您了解用户的语言,可以尝试其中一种语言:

decimal value = Decimal.Parse("0.02", CultureInfo.GetCultureInfo("en-US"));
decimal value = Decimal.Parse("0,02", CultureInfo.GetCultureInfo("de-DE"));

答案 3 :(得分:0)

你正在取代“点”。这意味着“0.02”将是“002”,将解析为“2”。

只是不要替换“点”。我认为替换逗号不是必要的。

答案 4 :(得分:0)

您还可以制作一个简单的方法来考虑您想要的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;
}

答案 5 :(得分:0)

我会使用Decimal.Parse("0.02", CultureInfo.InvariantCulture),但只有在您使用.作为旁观者时才有效。 为确保不会出现任何错误,应始终在解析数据之前验证数据。

Decimal.Parse似乎忽略了未知字符,而其他Parse函数则抛出异常。