/ Formato numérico que trata do agrupamento de dígitos - c #, numbers, cultureinfo

Formato do número C # que trata do agrupamento de dígitos - c #, numbers, cultureinfo

Eu encontrei um problema com C # (e Java) noanálise / validação de formatação numérica sensível à cultura. Parece que quando se trata de agrupamento de dígitos, o separador pode ser colocado em qualquer lugar no .net. Existe uma maneira de impor uma adesão estrita do uso do agrupamento de dígitos? Por exemplo, veja o seguinte:

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

Para complicar as coisas, as culturas diferem no número de dígitos por grupo.

Alguma sugestão?

Edit: Foi sugerido que eu adicione CultureInfo no Parse (), mas isso não funciona corretamente ainda. Por exemplo:

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

Respostas:

0 para resposta № 1

você pode encontrar informações sobre análise em Aqui como uso CultureInfo culture como visto no exemplo no link

por exemplo

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

mas "en-US" não "pode ​​analisar" 1 304,16 "." fr-FR "can -> you" ll get 1304.16


0 para resposta № 2

Você deve especificar CultureInfo, uma vez que os resultados da análise são dependente de cultura por exemplo.

  // 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

0 para resposta № 3

Para analisar corretamente os números, você precisa definitivamente da Source Culture Info do número. Referir isto Analisando números de diferentes culturas em c #