验证区域性中的十进制数

本文关键字:十进制数 区域性 验证 | 更新日期: 2023-09-27 18:26:08

有人能解释一下为什么在"en-GB"区域性格式中使用十进制吗。Parse()函数将为1.5返回15?

当输入1.5时,我看到了与"de"文化相同的结果,返回值为15。

我知道这在程序上是正确的,我只是想理解为什么这是正确的。我在谷歌上搜索了一下,一无所获:(

我试图根据区域性验证用户输入,当解析失败时,用0填充输入字段,但当他们输入1,5时,用15填充字段感觉不对,我觉得当为英语格式输入1,5而不是返回15时,应该是"失败"。

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

验证区域性中的十进制数

,是英国文化中的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",就像它所期望的"1233.56"一样……你可能想检查多种模式格式,例如"N"answers"g",看看它是否与其中任何一种匹配。