none
Conversão de virgula para ponto RRS feed

  • Pergunta

  • Olá Galera,

     

    Tenho um programa que faz alguns calculos e exive em um textbox (total.text) e fiz uma conexão com banco de dados SQL 2005, porém como o meu programa retorno o valor total com virgula e coloquei no banco de dados Decimal(18,5), o banco entende que o valor ex. 188,49 é varchar, como faço para o programa retornar o valor com ponto(188.49) ? ou é melhor trocar o tipo de dados no SQL? Para qual? sendo que depois vou fazer um script grande para somar outras coisas..

     

    Obrigado!

    quinta-feira, 29 de julho de 2010 15:19

Respostas

  • Marcelo,

    Provavelmente você está concatenando strings ao mandar o comando para o banco... Para evitar esse e outros tipos de problemas, utilize parâmetros nos seus comandos...

    http://www.macoratti.net/09/07/c_adn_7.htm


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 29 de julho de 2010 17:05
    Moderador
  • Malange,

     

    Ainda não esta invertendo o virgula para ponto...

    Sobre a solução do Alves, os padrões que ele utiliza no meu sistema também é assim.

    Ja tentei outras formas e não consegui fazer essa conversão, e pelo banco de dados pelo que pesquisei não existe nenhum tipo de dados que utilize "," em vez de "." para fazer a inclusão na tabela.

    voce deve estar a fazer algo de errado, no meu funciona. Eu tenho tudo em english, VS 2008 e VS 2010 e Windows 7. Qual e a versao que estas a usar?

    Diz-me uma coisa: Busca a informacao da tua cultura, e diz-me qual e?


    Just Be Humble Malange!


    Muito Obrigado!

    O que eu fiz, entrei nas configurações de regiao e idioma no painel de controle e alterei o padrão de separação de "," para "." e deu certo

    Agora só não posso esquecer que sempre que instalar esse meu programa em algum computador tenho que alterar isso se não ocorrerá o erro!

    Muito Obrigado!

    quinta-feira, 29 de julho de 2010 20:28
  • olá Marcelo bom vou postar um método q eu mesmo criei e sempre uso para substituição de caracteres entre outras coisas para inverções de posições e tudo mais:
    public decimal AjustarNumero(string numero)
    {
       string novoNumero="";
       char[] arr = numero.ToCharArray();
       foreach(char item in arr)
       {
           //verifico se existe alguma virgula no "numero" digitado
           if(item.ToString() != ",")
           {
              //cada vez que o item for diferente de virgula
              //adiciona seu valor ao do novoNumero
              novoNumero += item.ToString();
           }
           else if(item.ToString() == ",")
           {
              //caso o item seja uma virgula ele o substitui 
              //altomaticamente a virgula por ponto
              //subistituo a virgula por ponto
              novoNumero += ".";
           }
       }
       //crio uma variavel de retorno decimal e especifico
       //quantas casas iram aparecer depois da virgula e 
       //retorno seu valor
       decimal retorno = Decimal.Round(Convert.ToDecimal(novoNumero), 2);
       return retorno;
    }
    

    Supondo que vc crie esta função dentro de seu Forms mesmo a chame

    private void seuBotao_Click(object sender, EventArgs e)

    {

          decimal numero = 0;

          numero = AjustarNumero(total.Text);

          MessageBox.Show(numero.ToString());

    }

    //a nota se vc quiser vc também pode fazer este método retornar uma string creio eu q ficaria melhor e então vc só 

    //converteria o valor na hr de mandar para o banco de dados hr q fosse passar ele como parametro para tua lista de parametros

    //ou direto no teu comando INSERT como queira

    Qualquer dúvida se eu puder ajudar meu procura ai pelo foram e se solucionar teu problema se puder marca como resposta.

    Att Edney

    sexta-feira, 30 de julho de 2010 03:24

Todas as Respostas

  • Olá Galera,

     

    Tenho um programa que faz alguns calculos e exive em um textbox (total.text) e fiz uma conexão com banco de dados SQL 2005, porém como o meu programa retorno o valor total com virgula e coloquei no banco de dados Decimal(18,5), o banco entende que o valor ex. 188,49 é varchar, como faço para o programa retornar o valor com ponto(188.49) ? ou é melhor trocar o tipo de dados no SQL? Para qual? sendo que depois vou fazer um script grande para somar outras coisas..

     

    Obrigado!

    isto tem haver com a teu System.Globalization.CultureInfo(). Em alguns paises usam virgula e outros usam ponto. por isso tens de pegar a System.Globalization.CultureInfo e converter com outro que usa ponto.

    System.Globalization.NumberFormatInfo info = new System.Globalization.NumberFormatInfo();
     info.NumberDecimalSeparator = ",";
     info.NumberGroupSeparator = ".";
     double d = Convert.ToDouble("1234,5", info);

    O resultado sera: 1234.5


    Just Be Humble Malange!
    quinta-feira, 29 de julho de 2010 16:01
    Moderador
  • Marcelo,

    Provavelmente você está concatenando strings ao mandar o comando para o banco... Para evitar esse e outros tipos de problemas, utilize parâmetros nos seus comandos...

    http://www.macoratti.net/09/07/c_adn_7.htm


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 29 de julho de 2010 17:05
    Moderador
  • Olá Galera,

     

    Tenho um programa que faz alguns calculos e exive em um textbox (total.text) e fiz uma conexão com banco de dados SQL 2005, porém como o meu programa retorno o valor total com virgula e coloquei no banco de dados Decimal(18,5), o banco entende que o valor ex. 188,49 é varchar, como faço para o programa retornar o valor com ponto(188.49) ? ou é melhor trocar o tipo de dados no SQL? Para qual? sendo que depois vou fazer um script grande para somar outras coisas..

     

    Obrigado!

    isto tem haver com a teu System.Globalization.CultureInfo(). Em alguns paises usam virgula e outros usam ponto. por isso tens de pegar a System.Globalization.CultureInfo e converter com outro que usa ponto.

     

     

    O resultado sera: 1234.5


    Just Be Humble Malange!

     

    System.Globalization.NumberFormatInfo info = new System.Globalization.NumberFormatInfo();
    
     info.NumberDecimalSeparator = ",";
    
     info.NumberGroupSeparator = ".";
    
     double d = Convert.ToDouble("1234,5", info);


    tentei fazer isso, porém nao deu certo ele continua exibindo com a ","

    Decimal

     

     

    txt_Total.Text = resultado.ToString();

     

     

    resultado = Convert.ToDecimal("txt_ValorMercadoria.Text",info) + Convert.ToDecimal("txt_ST.Text",info)
    quinta-feira, 29 de julho de 2010 17:17
  • No meu funciona perfeitamanete, talvez porque esta definido em english. Talvez tens de pegar a cultura information primeiro e depois fazer o que disse. Espera um pouco.

    Tenta usar o exemplo do Alves vou dar uma olhada. Desculpa


    Just Be Humble Malange!
    quinta-feira, 29 de julho de 2010 17:34
    Moderador
  • Olha tentei aqui na minha maquina com virgula e funcionou:

     private void button18_Click(object sender, EventArgs e)
        {
          Decimal data = Decimal.Parse(this.textBox2.Text,new System.Globalization.CultureInfo("fr-FR"));
          
          MessageBox.Show(data.ToString());
    
        }   


    Just Be Humble Malange!
    quinta-feira, 29 de julho de 2010 17:51
    Moderador
  • Malange,

     

    Ainda não esta invertendo o virgula para ponto...

    Sobre a solução do Alves, os padrões que ele utiliza no meu sistema também é assim.

    Ja tentei outras formas e não consegui fazer essa conversão, e pelo banco de dados pelo que pesquisei não existe nenhum tipo de dados que utilize "," em vez de "." para fazer a inclusão na tabela.

    quinta-feira, 29 de julho de 2010 19:35
  • Malange,

     

    Ainda não esta invertendo o virgula para ponto...

    Sobre a solução do Alves, os padrões que ele utiliza no meu sistema também é assim.

    Ja tentei outras formas e não consegui fazer essa conversão, e pelo banco de dados pelo que pesquisei não existe nenhum tipo de dados que utilize "," em vez de "." para fazer a inclusão na tabela.

    voce deve estar a fazer algo de errado, no meu funciona. Eu tenho tudo em english, VS 2008 e VS 2010 e Windows 7. Qual e a versao que estas a usar?

    Diz-me uma coisa: Busca a informacao da tua cultura, e diz-me qual e?


    Just Be Humble Malange!
    quinta-feira, 29 de julho de 2010 19:39
    Moderador
  • Malange,

     

    Ainda não esta invertendo o virgula para ponto...

    Sobre a solução do Alves, os padrões que ele utiliza no meu sistema também é assim.

    Ja tentei outras formas e não consegui fazer essa conversão, e pelo banco de dados pelo que pesquisei não existe nenhum tipo de dados que utilize "," em vez de "." para fazer a inclusão na tabela.

    voce deve estar a fazer algo de errado, no meu funciona. Eu tenho tudo em english, VS 2008 e VS 2010 e Windows 7. Qual e a versao que estas a usar?

    Diz-me uma coisa: Busca a informacao da tua cultura, e diz-me qual e?


    Just Be Humble Malange!


    Muito Obrigado!

    O que eu fiz, entrei nas configurações de regiao e idioma no painel de controle e alterei o padrão de separação de "," para "." e deu certo

    Agora só não posso esquecer que sempre que instalar esse meu programa em algum computador tenho que alterar isso se não ocorrerá o erro!

    Muito Obrigado!

    quinta-feira, 29 de julho de 2010 20:28
  • Marcelo,

    Apesar de ter funcionado, não é recomendado que você desenvolva sistemas que só funcionem com uma configuração regional!!

    Por quê você não posta pra gente o trecho de código que estava resultando nesse problema para te ajudarmos a alterá-lo para que ele funcione com qualquer configuração regional que estiver ativada?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 29 de julho de 2010 23:30
    Moderador
  • Olá,

     

    Veja se ajuda:

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/813e9c5d-3030-4691-975c-a57a81df08a4/#2c31ed1b-239d-4b3b-86e2-c61f653b7df7

     

    att


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    sexta-feira, 30 de julho de 2010 02:03
  • olá Marcelo bom vou postar um método q eu mesmo criei e sempre uso para substituição de caracteres entre outras coisas para inverções de posições e tudo mais:
    public decimal AjustarNumero(string numero)
    {
       string novoNumero="";
       char[] arr = numero.ToCharArray();
       foreach(char item in arr)
       {
           //verifico se existe alguma virgula no "numero" digitado
           if(item.ToString() != ",")
           {
              //cada vez que o item for diferente de virgula
              //adiciona seu valor ao do novoNumero
              novoNumero += item.ToString();
           }
           else if(item.ToString() == ",")
           {
              //caso o item seja uma virgula ele o substitui 
              //altomaticamente a virgula por ponto
              //subistituo a virgula por ponto
              novoNumero += ".";
           }
       }
       //crio uma variavel de retorno decimal e especifico
       //quantas casas iram aparecer depois da virgula e 
       //retorno seu valor
       decimal retorno = Decimal.Round(Convert.ToDecimal(novoNumero), 2);
       return retorno;
    }
    

    Supondo que vc crie esta função dentro de seu Forms mesmo a chame

    private void seuBotao_Click(object sender, EventArgs e)

    {

          decimal numero = 0;

          numero = AjustarNumero(total.Text);

          MessageBox.Show(numero.ToString());

    }

    //a nota se vc quiser vc também pode fazer este método retornar uma string creio eu q ficaria melhor e então vc só 

    //converteria o valor na hr de mandar para o banco de dados hr q fosse passar ele como parametro para tua lista de parametros

    //ou direto no teu comando INSERT como queira

    Qualquer dúvida se eu puder ajudar meu procura ai pelo foram e se solucionar teu problema se puder marca como resposta.

    Att Edney

    sexta-feira, 30 de julho de 2010 03:24
  • Boa tarde,

    Acho que não precisa fazer isto não.

    Se você passar um toString no valor?

    Eu fiz assim e deu certo:

    Console.WriteLine("A=" + raio.ToString("F4", CultureInfo.InvariantCulture));

    No caso o "F4" é a quantidade de casas após o ponto, vc pode colocar "F1" para uma casa e assim por diante...

    segunda-feira, 4 de junho de 2018 20:43