为什么decimal.Parse(10 10)有效?

时间:2011-09-20 08:25:15

标签: c# parsing decimal

为什么decimal.Parse(10 10)有效?
在这种情况下我需要得到例外。
请告诉我一些事情。

decimal c;
try
{
   c = decimal.Parse("10 10");
   Console.Write(c);
   Console.ReadLine();
}
catch (Exception)
{
    throw;
}

3 个答案:

答案 0 :(得分:10)

当我运行它时会引发异常 - 这让我怀疑它是文化敏感的。

我的猜测是你在一个将空间用作“千”分隔符的文化中。例如,如果我尝试解析“10,10”,因为逗号是我默认文化中的千位分隔符。

为防止这种情况,请使用

decimal value = decimal.Parse(text, NumberStyles.None);

...或排除AllowThousands的{​​{3}}的其他适当组合。

答案 1 :(得分:8)

来自MSDN:“参数s使用NumberStyles.Number样式进行解释。这意味着空格和允许数千个分隔符,但货币符号不允许。要明确定义元素(例如货币)可以出现在s中的符号,千位分隔符和空格,使用Decimal.Parse(String,NumberStyles)或Decimal.Parse(String,NumberStyles,IFormatProvider)方法。“< / p>

http://msdn.microsoft.com/en-us/library/cafs243z.aspx

编辑:为了进一步澄清,您需要

  1. 明确将应用程序的文化设置为不允许使用数字空格或
  2. 的文化
  3. 显式提供NumberStyles参数,该参数指定不允许空格
  4. 编辑2: Jon Skeet的回答是正确的。例如,以下内容不会抛出异常,因为空格在sv-SE中用作千位分隔符:

    Decimal.Parse(" 10 10 ", CultureInfo.GetCultureInfo("sv-SE").NumberFormat)
    

    然而,以下内容会抛出异常:

    Decimal.Parse(" 10 10 ", CultureInfo.GetCultureInfo("en-US").NumberFormat)
    

答案 2 :(得分:2)

我刚刚在Visual Studio 2010 / C#4.0上运行此代码,并按预期获得了FormatException。您的计算机配置使用哪些区域设置?是否有可能将“”(空格)作为千位分隔符或小数分隔符?