繁体   English   中英

验证文化中的小数

[英]validating decimal numbers in culture

谁能解释为什么在“ en-GB”区域性格式中,decimal.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属性是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”,以查看其是否与它们中的任何一种匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM