我只想允许在千位中带有逗号的数字字符串值,但是 这段代码不起作用,并成功解析了“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
如果你想验证一个字符串是否匹配模式 n,nnn,nnn,nnn... 尝试使用正则表达式,例如
Regex r = new Regex(@"^\d{1,3}(,\d\d\d)*$");
if(r.IsMatch(yourNumber))
...
我的回答是:
是的,它应该只允许千位分隔符出现在千位,但它的行为不正确。
我认为您在问题中描述的行为是一个错误,并且“AllowThousands”确实是一个用词不当。也许它应该被称为“StripOutThansounds”。
如果用户打算输入一百万,并将其输入为 [1,000,0000](不小心输入了一个额外的零),TryParse 会将其接受为一千万。对我来说,这可能是一个非常糟糕的错误。