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 № 1você 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 #