为什么小数.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;
}

为什么小数.Parse(10 10)是有效的

当我运行它时会抛出一个异常——这让我怀疑它是文化敏感的。

我猜你是在一个使用空格作为"千位"分隔符的文化中。例如,如果我尝试解析"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.aspx

edit:为了进一步说明,您需要

  1. 显式地将应用程序的区域性设置为不允许数字中有空格,或者
  2. 显式地提供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,正如预期的那样。您的计算机配置为使用哪些区域设置?是否可以使用"(空格)作为千位分隔符或小数分隔符?