Jump to content
Sign in to follow this  
sergionpinheiro

Inserir duas casas dedimais

Recommended Posts

Fala galera, estou com o seguinte problema.

Tenho um código que faz uma consulta em uma determinada tabela, carrega esses dados e insere em outra. Até aí blz, o problema é que tem um campo chamado qtd e, quando ele está com mais de uma casa decimal, o código só insere uma casa. Tipo: consulta retornou 20 e na hora de inserir só insere 2. Alguém sabe dizer pq? Segue parte do código:

while ($row_pacotes = mysql_fetch_assoc($qr_pacotes)) {
$estoque = $row_pacotes['estoque'];
$produto = $row_pacotes['produto'];
$qtd_pro = $row_pacotes['qtd'];
$values = array();
for($i = 0; $i < sizeof($qtd_pro); $i++) {
$values[] = "('{$estoque}','{$produto[$i]}','{$qtd_pro[$i]}')";
}
$insert_produto = 'INSERT INTO tb_produtos(estoque, produto, qtd)VALUES '.implode(',', $values);
$qr_insert_produto = mysql_query($insert_produto) or die(mysql_error());
}
{$estoque} está sem o [$i], pois o valor é igual para todos os registros inseridos.
PS.: O banco de dados está configurado para tinyint, ou seja, 4 casas
Valeu

Share this post


Link to post
Share on other sites

Campo tinyint é diferente de campo com suporte a decimal.

Casas decimas numa operação como a que você faz serão ignoradas.

 

Para manter a consistencia dos valores, os dados precisam ser armazenados em campos iguais ou equivalentes.

Share this post


Link to post
Share on other sites

Fala Vinicius, campo decimal, é o modo de falar, apenas quis dizer que quero gravar um número de até 4 algarismos.

 

Contudo, com o código acima, ele só pega a primeira casa decimal, ou seja, números como o 20, são gravados como 2.

 

Blz? Você tem alguma ideia do que está ocorrendo?

Share this post


Link to post
Share on other sites

Se for usar valores de moeda, melhor usar campo decimal(10,2). Caso precise gravar numeros, use INT ou VARCHAR mesmo.

 

O tipo de dados TINYINT do MySQL é usado quando precisamos armazenar valores inteiros que se encaixem na faixa de -128 a 127. Este tipo ocupa 1 byte de espaço (8 bits).

Share this post


Link to post
Share on other sites

da um echo dentro do for pra ver como estão surgindo os valores:

 for($i = 0; $i < sizeof($qtd_pro); $i++) {
      $values[] = "('{$estoque}','{$produto[$i]}','{$qtd_pro[$i]}')";
      echo $qtd_pro[$i]."<br/>";
    }

Share this post


Link to post
Share on other sites

Bom dia Ruan,

 

Fiz a sua dica, porém ele aparece somente um dígito mesmo. Inseri um produto com 10 qtd, porém ele só insere o número '1', e no echo, também só aparece o 1. Toquei o tipo de campo para int, conforme mencionado acima, mas não resolveu.

 

Mais alguma luz?

Share this post


Link to post
Share on other sites

Faz o seguinte, dentro do for, tira as posições do array:

 

 $values[] = "('{$estoque}','{$produto[$i]}','{$qtd_pro[$i]}')";

 

deixa assim:

 

 

 $values[] = "('{$estoque}','{$produto}','{$qtd_pro}')";

Share this post


Link to post
Share on other sites

a questão é que, a cada iteração do while os valores para $produto e $qtd_pro irão mudar. Então, você nem precisa do laço for. Basta usar um contador fora do while e aplicar no array $values.

 $values = array();
$cont = 0;
while ($row_pacotes = mysql_fetch_assoc($qr_pacotes)) {
    $estoque = $row_pacotes['estoque'];
    $produto = $row_pacotes['produto'];
    $qtd_pro = $row_pacotes['qtd'];
   
   $values[$cont] = "('{$estoque}','{$produto}','{$qtd_pro}')";
   $cont++;
    }
 

Isso é suficiente pra gerar um array com os dados desejados.

 

Até mesmo pq $produto e $qtd_pro não são arrays :D

Edited by (RNU) Ruan Silva

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By patriciahelena
      Olá pessoal,
      Não sou programadora, mas faça algumas coisinhas. Preciso de ajuda:
      A formulá abaixo precisa retornar o valor 0,642047
      var = 0.01*65*(10^(((0.000007047*65)+0.01392)*35+((0.0002311*65)-0.5236)));
      Mas está retornando 6.5
       
      Eu não faço ideia porque. Poderiam me ajudar!
      Obrigada
       
    • By joeliton.lima
      Bom dia galera.
      Sou novo no fórum, e estou uma dúvida, estou com um formulário de cálculo de cubagem, e queria saber como eu posso fazer para que o meu resultado que fica coluna "Cubagem" fique arrendado para 2 casas decimais, pois no modo que eu fiz quando eu tento por um número fracionado ele mostra mais de duas casas.
      Oque eu queria era o seguinte, ao digitar por exemplo os valores:
      Quantidade de volumes - 2
      Altura - 2.22
      Largura - 2.22
      Profundidade - 2.22
      E a ideia é que mostre em Cubagem um valor de "21.88" ou invés de "21.882096000000004".
      Alguém consegue ajudar?
      Abaixo seguem os códigos:
       
      <script> function calcular() { calc.CUBAGEM1.value = (calc.ALTURA1.value*1) * (calc.LARGURA1.value*1) * (calc.PROFUNDIDADE1.value*1) * (calc.QUANTVOL1.value*1) + " M³"; } </script> <form name="calc"> <table border="1"> <tr> <td><input name="QUANTVOL1" id="QUANTVOL1" value="" onkeyup="calcular()"/> </td> <td><input name="ALUTRA1" id="ALTURA1" value="" onkeyup="calcular()"/> </td> <td><input name="LARGURA1" id="LARGURA1" value="" onkeyup="calcular()"/> </td> <td><input name="PROFUNDIDADE1" id="PROFUNDIDADE1" value="" onkeyup="calcular()"/> </td> <td><input name="CUBAGEM1" readonly="readonly" id="CUBAGEM1"> </td> </tr> </table> </form>
    • By Gurandao
      Olá galera, preciso criar um cálculo de correção monetária, já criei a tabela com todos os índices e fatores baseados no site https://api.tjsp.jus.br (Abril/2017).
      Vamos ao que interessa:
      Puxei os valores da tabela, a fórmula do cálculo é: Valor  (dividido) pelo fator do mes que venceu (multiplicado) pelo ultimo indice cadastrado (mes anterior).
      Então temos os valores: Valor (270.72), fator do mês que venceu (48.485963) e fator do mês anterior atual (66.839575).
      Eu criei o seguinte cálculo:
      $correcao =$valor / $fator_vcto * $fator_atual;
      ou seja:
      $correcao = 270.72 / 48.485963 * 66.839575;
      O resultado que ele me apresenta é 276.699454107990 sendo que na calculadora e no excel o valor correto calculado é 373.1968723
       
      Desde já agradeço à todos que puderem me ajudar!
       
    • By Nightmare SEP
      Bom dia,
       
      Estou a procura, mas ainda não encontrei nada.
      Preciso arredondar apenas as casas decimais (de dois dígitos) para cima.
       
      Exemplo:
      de 1.25 arredondar para 1.30
      de 0.87 arredondar para 0.90
       
      Como faço isso?
       
      Obrigado
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.