NumberStyles.AllowThousands 不应该只允许在美国文化中使用千位分隔符吗?

问题描述 投票:0回答:2

我只想允许在千位中带有逗号的数字字符串值,但是 这段代码不起作用,并成功解析了“2,22”,它在千处没有逗号。

   double dollarValue;
           var dollarStringValue="2,22";
            var usCulture = CultureInfo.CreateSpecificCulture("en-US");
            var allowedNumberStyle = NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint;
            if (double.TryParse(dollarStringValue, allowedNumberStyle, usCulture, out dollarValue))
            { 
            // This is parsed successfully to 222
             Console.WriteLine(dollarValue);
            }

这是 NumberStyles.AllowThousands 在 en-Us 文化中的预期行为吗(它的 NumberFormatInfo.NumberGroupSizes 设置为 3)?或者我错过了什么?

使用.Net 4.5

c# .net-4.5 number-formatting
2个回答
1
投票

如果你想验证一个字符串是否匹配模式 n,nnn,nnn,nnn... 尝试使用正则表达式,例如

Regex r = new Regex(@"^\d{1,3}(,\d\d\d)*$");
if(r.IsMatch(yourNumber))
  ...

0
投票

我的回答是:

是的,它应该只允许千位分隔符出现在千位,但它的行为不正确。

我认为您在问题中描述的行为是一个错误,并且“AllowThousands”确实是一个用词不当。也许它应该被称为“StripOutThansounds”。

如果用户打算输入一百万,并将其输入为 [1,000,0000](不小心输入了一个额外的零),TryParse 会将其接受为一千万。对我来说,这可能是一个非常糟糕的错误。

© www.soinside.com 2019 - 2024. All rights reserved.