[英]Why is decimal.Parse() slower than (decimal)double.Parse()?
[英]Why decimal.Parse(10 10) is valid?
为什么decimal.Parse(10 10)
有效?
在这种情况下我需要得到例外。
请告诉我一些事情。
decimal c;
try
{
c = decimal.Parse("10 10");
Console.Write(c);
Console.ReadLine();
}
catch (Exception)
{
throw;
}
当我运行它时会引发异常 - 这使我怀疑它对文化敏感。
我的猜测是你在一个将空间用作“千”分隔符的文化中。 例如,如果我尝试解析“10,10”,因为逗号是我默认文化中的千位分隔符。
为防止这种情况,请使用
decimal value = decimal.Parse(text, NumberStyles.None);
......或NumberStyles
一些其他适当组合,不包括AllowThousands
。
来自MSDN:“参数s使用NumberStyles.Number样式进行解释。这意味着允许使用空格和千位分隔符,但不允许使用货币符号。要明确定义元素(如货币符号,千位分隔符和空格),可以出现在s中, 使用Decimal.Parse(String,NumberStyles)或Decimal.Parse(String,NumberStyles,IFormatProvider)方法 。“
http://msdn.microsoft.com/en-us/library/cafs243z.aspx
编辑:为了进一步澄清,你需要
编辑2: Jon Skeet的回答是正确的。 例如,以下内容不会抛出异常,因为空格在sv-SE中用作千位分隔符:
Decimal.Parse(" 10 10 ", CultureInfo.GetCultureInfo("sv-SE").NumberFormat)
但是,以下内容会抛出异常:
Decimal.Parse(" 10 10 ", CultureInfo.GetCultureInfo("en-US").NumberFormat)
我刚刚在Visual Studio 2010 / C#4.0上运行此代码,并获得了FormatException,如预期的那样。 您的计算机配置使用哪些区域设置? 是否有可能将“”(空格)作为千位分隔符或小数分隔符?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.