none
Conversão de valores RRS feed

  • Pergunta

  • Boa tarde, estou com um problema na conversão de valores, meu código está assim:

    double a, b, c, d, f, g, total, margem;
                a = 0.041;
                b = double.Parse(txt_val_tot_nf.Text);
                c = a * b;
                txt_val_icms.Text = c.ToString("N2");
                d = double.Parse(txt_desp_var.Text);
                f = c + d;
                txt_tot_desp_val.Text = f.ToString("N2");
                g = double.Parse(txt_tot_prod.Text);
                total = b - (f + g);
                margem = total / b * 100;
                txt_margem.Text = margem.ToString("N2");

    Os valores que eu obtenho no txt_margem, txt_tot_desp_val e txt_val_icms e quero dar um update em uma tabela no banco de dados SQL Server.

    E essas tabelas no banco estão do tipo decima (18,2) e não consigo nem substituindo , por . no textbox.

    Falta alguma conversão nessas variáveis?

    Erro que aparece na hora de updatar o campo: Additional information: Error converting data type varchar to numeric

    Grato! 

    quarta-feira, 28 de outubro de 2015 18:56

Respostas

  • Boa noite amigo, fiz exatamente o que você sugeriu, mas mesmo assim continua dando o mesmo erro.

    decimal a, b, c, d, f, g, total, margem;
                a = 0.041m;
                b = decimal.Parse(txt_val_tot_nf.Text);
                c = a * b;
                txt_val_icms.Text = c.ToString("N2");
                d = decimal.Parse(txt_desp_var.Text);
                f = c + d;
                txt_tot_desp_val.Text = f.ToString("N2");
                g = decimal.Parse(txt_tot_prod.Text);
                total = b - (f + g);
                margem = total / b * 100;
                txt_margem.Text = margem.ToString("N2");

    • Marcado como Resposta Marcos SJ quinta-feira, 29 de outubro de 2015 13:01
    quarta-feira, 28 de outubro de 2015 21:55

Todas as Respostas

  • Para valores use decimal, amigo.

    "O Decimal é o tipo ideal para cálculo de valores. Tem uma amplitude enorme (79,228,162,514,264,337,593,543,950,335 até -79,228,162,514,264,337,593,543,950,335) e possui uma das menores margens de erro para arredondamento.

    Double é mais adequado para cálculos científicos gerais, onde a margem de erro não é desprezível, mas é tolerável. Apesar de ter um intervalo de valores maior, o cálculo da mantissa e da característica produz problemas conhecidos de arredondamento."

    se for usar decimal, a variavel a tem que receber o valor 0.041m, se for double 0.041d.


    Leonardo D'Amato

    • Sugerido como Resposta Eduardo xUni quarta-feira, 28 de outubro de 2015 20:09
    quarta-feira, 28 de outubro de 2015 19:06
  • Boa noite amigo, fiz exatamente o que você sugeriu, mas mesmo assim continua dando o mesmo erro.

    decimal a, b, c, d, f, g, total, margem;
                a = 0.041m;
                b = decimal.Parse(txt_val_tot_nf.Text);
                c = a * b;
                txt_val_icms.Text = c.ToString("N2");
                d = decimal.Parse(txt_desp_var.Text);
                f = c + d;
                txt_tot_desp_val.Text = f.ToString("N2");
                g = decimal.Parse(txt_tot_prod.Text);
                total = b - (f + g);
                margem = total / b * 100;
                txt_margem.Text = margem.ToString("N2");

    • Marcado como Resposta Marcos SJ quinta-feira, 29 de outubro de 2015 13:01
    quarta-feira, 28 de outubro de 2015 21:55
  • qual erro, amigo?

    Leonardo D'Amato

    quinta-feira, 29 de outubro de 2015 10:52
  • O mesmo.

    Erro que aparece na hora de updatar o campo: Additional information: Error converting data type varchar to numeric.

    Esse erro acontece na hora de dar o update no banco de dados.

    Por exemplo eu tenho um valor 950,00 se for com vírgula da o erro se eu colocar o ponto 950.00 funciona.

    Para isso eu usei a substituição de ponto por vírgula, mas isso não resolve quando o número é mais que 999, porque fica assim 1.100.20 aí eu tenho que pegar e apagar o primeiro ponto (1100.20) aí ele funciona também.

    Grato!

    quinta-feira, 29 de outubro de 2015 11:17
  • Cara posta aki o codigo que grava a informacao na base de dados por favor, coloca aki o teu insert, deixa eu ver...

    talvez voce precise usar parametros, do que atribuir direitamente...


    A flower cannot blossom without sunshine, and man cannot live without love.

    quinta-feira, 29 de outubro de 2015 11:23
    Moderador
  • Bom dia Leonardo N. D'Amato,

    Me baseando no que ele disse é o mesmo erro, ou seja:

    "Additional information: Error converting data type varchar to numeric".



    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 29 de outubro de 2015 11:48
  • Bom dia galera, então, deu certo agora. Era esse "N2" (txt_val_icms.Text = c.ToString("N2");que estava atrapalhando, estava usando ele para ficar mais 'bonito' os números no textbox, retirei ele, inseri normal e no datagridview os números ficaram corretos.

    Obrigado pela atenção!



    • Editado Marcos SJ quinta-feira, 29 de outubro de 2015 13:01 Edição
    quinta-feira, 29 de outubro de 2015 12:18