Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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).

Compartilhar este post


Link para o post
Compartilhar em outros 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/>";
    }

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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}')";

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por 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
       
    • Por 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>
    • Por 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!
       
    • Por 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
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.