C#处理数字分组的数字格式

时间:2013-07-23 13:50:56

标签: c# numbers cultureinfo

我遇到了关于文化敏感数字格式的解析/验证的C#(和Java)问题。似乎在数字分组方面,分隔符可以放在.NET中的任何位置。有没有办法强制严格遵守数字分组的使用?例如,请参阅以下内容:

Decimal.Parse("9,0"); /// Returns 90, which is wrong
Decimal.Parse("90,00"); /// Returns 9000, which is wrong
Decimal.Parse("9,000"); /// Returns 9000, which is right

为了使事情复杂化,文化在每组的位数上有所不同。

有什么建议吗?

编辑:有人建议我将CultureInfo添加到Parse()中,但这仍然不能正常工作。例如:

CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); /// Murican English
Double.Parse("9,0", culture); /// Returns 90 when it should throw an exception

culture = CultureInfo.CreateSpecificCulture("pt-BR"); /// Brazillian Portuguese
Double.Parse("9.0", culture); /// Returns 90 when it should throw an exception

3 个答案:

答案 0 :(得分:0)

您可以在here中找到有关使用CultureInfo culture解析的信息,如链接中的示例所示

例如

culture = CultureInfo.CreateSpecificCulture("en-US");
number = Double.Parse(value, culture);// 1,304.16 --> 1304.16 

但“en-US”无法解析“1 304,16”。 “fr-FR”可以 - >你会得到1304.16

答案 1 :(得分:0)

您应指定 CultureInfo ,因为解析结果依赖于文化,例如

  // English, United States: 
  // "," is a thousand but not decimal separator, decimal separator is "." 
  // d1 = 90 since "," is NOT a decimal separator
  Decimal d1 = Decimal.Parse("9,0", new CultureInfo("en-US")); // <- 90 

  // Russian, Russia:
  // "," is a decimal separator
  // d2 = 9.0 since "," is a decimal separator
  Decimal d2 = Decimal.Parse("9,0", new CultureInfo("ru-RU")); // <- 9.0

答案 2 :(得分:0)

为了正确解析数字,您肯定需要数字的源文化信息。 请参阅此 Parsing numbers from different cultures in C#