为什么小数.Parse(10 10)是有效的
本文关键字:有效 为什么 Parse 小数 | 更新日期: 2023-09-27 18:09:18
为什么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
)的其他适当组合
From MSDN: "参数s使用NumberStyles进行解释。许多风格。这意味着允许空格和千位分隔符,但货币符号不允许。要显式定义s中可以出现的元素(如货币符号、千位分隔符和空格),可以使用Decimal。解析(String, NumberStyles)或十进制。解析(String, NumberStyles, IFormatProvider)方法。"
http://msdn.microsoft.com/en-us/library/cafs243z.aspxedit:为了进一步说明,您需要
- 显式地将应用程序的区域性设置为不允许数字中有空格,或者
- 显式地提供NumberStyles参数,指定不允许使用空格
edit 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,正如预期的那样。您的计算机配置为使用哪些区域设置?是否可以使用"(空格)作为千位分隔符或小数分隔符?