Ir para conteúdo
patriciahelena

[Resolvido] Calculo com casas decimais

Recommended Posts

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

No PHP, a operação exponencial é representada com "**" e não "^".

 

Então basta substituir pela representação correta, ficará assim:

 

Citar

0.01*65*(10**(((0.000007047*65)+0.01392)*35+((0.0002311*65)-0.5236)));

Compartilhar este post


Link para o post
Compartilhar em outros sites

O @navegantenarede já solucionou o problema, mas apenas para complementar, deixo a sugestão de uso da biblioteca BC Math para evitar erros por imprecisão do float.

 

Eis um exemplo:

<?php
bcscale( 50 );

$var1 = bcmul( bcadd( bcmul( '0.000007047', '65' ), '0.01392' ), '35' );

$var2 = bcsub( bcmul( '0.0002311', '65' ), '0.5236' );

$var = bcadd( $var1, $var2 );

$var = bcmul( '0.01', bcmul( '65', '10' ** $var ) );

echo $var;// 0.64204694174260250000000000000000000000000000000000

 

Veja:

https://pt.stackoverflow.com/questions/5642/resultado-impreciso-em-cálculo-com-números-quebrados

https://ericlemes.com/2013/08/12/float/

https://medium.com/@rdlagemann/a-imprecisão-dos-números-b1d922500e0b

https://pt.wikipedia.org/wiki/Vírgula_flutuante

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

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

Informação importante

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