none
Ponto decimal do ingles para portugues RRS feed

  • Pergunta

  • Alo pessoal, estou com um problema com o ponto decimal!

    Minha aplicação terá que rodar em estações que estão configurados com o ponto "." como ponto decimal (padrão inglês) e em estações que estão configurados com a vírgula "," como ponto decimal (Brasil), sendo que pra complicar mais um pouquinho o banco de dados (SQL-Server) no servidor do cliente pode estar em inglês ou português.

    Gostaria de desenvolver uma rotina que identificasse como valor esta vindo do banco de dados (SQL-Server - inglês ou português), transformasse para o nosso padrão (pt-BR) e dependendo da configuração da estação/banco de dado enviasse o valor com virgula ou ponto para a gravação do valor correto.

    Estou trabalhando com VB.NET 2010 e SQL-Server 2008, alguém pode me ajudar ?  

    Grato, Maurício

    sexta-feira, 31 de outubro de 2014 13:45

Respostas

  • Veja esses artigos abaixo:

    Como identificar o idioma do windows

    http://stackoverflow.com/questions/2583362/how-to-convert-string-to-double-with-proper-cultureinfo

    http://stackoverflow.com/questions/8341810/how-to-convert-12-4-to-decimal-en-us-culture

    Você pode utilizar também os campos com mascará para evitar que o usuário digite o identificador de decimal incorreto.
    sexta-feira, 31 de outubro de 2014 13:55

Todas as Respostas

  • Veja esses artigos abaixo:

    Como identificar o idioma do windows

    http://stackoverflow.com/questions/2583362/how-to-convert-string-to-double-with-proper-cultureinfo

    http://stackoverflow.com/questions/8341810/how-to-convert-12-4-to-decimal-en-us-culture

    Você pode utilizar também os campos com mascará para evitar que o usuário digite o identificador de decimal incorreto.
    sexta-feira, 31 de outubro de 2014 13:55
  • MauricioBogo, se os campos de valor estiverem difinidos com tipos númericos (como numeric, float, etc) e você utilizar tipos equivalente no .NET (int, decimal, double),  você não precisará se preocupar com isso. Isso vale tanto para a leitura quanto para a escrita de informações no BD.

    Tentar identificar a cultura pelo próprio valor gravado em forma de texto no BD é perigoso, pois você fará uma inferência. Por ex.:

    Se o valor "1.500" estiver armazenado em uma coluna varchar no BD. Você poderá inferir que o número equivale é 1 mil e quinhentos se considerar que em pt-BR o separador de milhar é o ".". Ou poderá inferir que o número equivale a 1,5 se considerar que em en-US o separador de decimal é o ".".

    Bem, voltando a sua pergunta rs uma possibilidade é (apesar de considerar isso problemático como citei acima):

    String seuValorLiteral = "12.25";
                decimal seuValorDecimal = 0;
    
                CultureInfo culturaDoValor = System.Threading.Thread.CurrentThread.CurrentCulture;
                //Se o valor literal não possui o mesmo separador decimal da cultura da máquina do usuário, utilizar a cultura "Neutra"
                if (!seuValorLiteral.Contains(System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator))
                {
                    culturaDoValor = CultureInfo.InvariantCulture;
                }
    
                seuValorDecimal = decimal.Parse(seuValorLiteral, culturaDoValor);


    terça-feira, 4 de novembro de 2014 14:22