验证文化中的十进制数

时间:2014-10-10 14:33:03

标签: c# .net parsing decimal

任何人都可以解释为什么,在' en-GB'文化格式化,decimal.Parse()函数将为1,5?

返回15

我看到' de'文化输入1.5时,回报为15。

我知道这在程序上是正确的,我只是想了解为什么这是正确的。我用Google搜索了这一点并且没有任何结果:(

我试图根据文化验证用户输入,并在解析失败时用0填充输入字段,但是当他们输入1,5时填充字段15不会感觉正确,我觉得它应该是"失败"当输入1,5进行英语格式化时,而不是返回15。

    try {
        validateSource.Text = decimal.Parse(validateThis, NumberStyles.Number, UserCulture).ToString();
    } catch {
        validateSource.Text = "0";
    }

1 个答案:

答案 0 :(得分:4)

,是英国文化中的NumberGroupSeparator。关于每组中有多少位数,没有验证。因此,“1,2,3”将被解析为123,即使这不是我们通常期望它被编写的方式。

虽然解析检查NumberGroupSizes属性是有意义的,但它根本没有。

您可以通过格式化解析结果,以非常原始方式模拟此检查,并查看它是否等于原始输入:

decimal value;
if (decimal.TryParse(text, NumberStyles.Number, culture, out value))
{
    if (text != value.ToString("N", culture))
    {
        // Okay, looks like something's up... report an error
    }
}

当然,这会阻止某人输入“1234.56”,因为它会指望“1,234.56”......您可能想要检查多种模式格式,例如“N”和“G”,看它是否与它们中的任何一个匹配。