Jump to content
Sign in to follow this  
Nightmare SEP

Arredondamento de casas decimais

Recommended Posts

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

Share this post


Link to post
Share on other sites

Te aconselho a estudar as funções matemáticas, sempre veja no manual:

 

http://php.net/manual/pt_BR/ref.math.php

 

Existem várias funções para fazer arredondamentos...

Se você fizer arredondamentos incorretos, pode ser que você dê muito prejuízo ou muito lucro para alguém... muito cuidado com isso.

Pense daqui há 5 anos aonde o seu código poderá impactar. ;)

Share this post


Link to post
Share on other sites

Depois de fazer alguns testes, não está como realmente preciso. Está dando diferença em valores.

 

O que eu preciso fazer no php é o mesmo que faz a função TETO() no Excel.

 

------------------

Exemplo no Excel:

 

=TETO((1546/1000);0,05) = 1,55

 

Mas dividindo 1546/1000 da igual a 1,546.

Share this post


Link to post
Share on other sites

TETO, em inglês, é CEIL.

Ou seja, você pode utilizar para sempre arredondar pra cima. Porém, a função ceil() não aceita casas decimais.

Então, você pode utilizar a função

round($valor, 1, PHP_ROUND_HALF_UP)

A constante PHP_ROUND_HALF_UP fará com que sempre arredonde para cima.

 

Agora, se o seu problema é a quantidade de casas decimais, vai ser um pouco mais complexo o arredondamento, porque não faz "sentido" arredondar um valor se a última casa decimal sempre for zero. Mas se é isso que você precisa, depois de arredondar o valor, sugiro utilizar number_format() para devolver a casa decimal, após o arredondamento.

$var = 3.57;
$var = round($var, 1, PHP_ROUND_HALF_UP);
$var = number_format($var, 2);
echo $var;

Ou, economizando linhas:

$var = 3.57;
$var = number_format( round( $var, 1, PHP_ROUND_HALF_UP ), 2);
echo $var;

Espero que funcione.

Share this post


Link to post
Share on other sites

Rafa Jaques, ajudou sim, mas ainda acho que não é o que eu preciso.

Eu editei meu post ali, tinha errado no exemplo do excel,

 

Preciso que fique com duas casas decimais, mas que arredonde 0,05 pra cima.

 

=TETO((1546/1000);0,05) = 1,55

Mas dividindo 1546/1000 da igual a 1,546.

Obrigado

Share this post


Link to post
Share on other sites

Isso Rafa Jaques, mas ainda não estou conseguindo chegar no que preciso.

 

Deixa eu colocar os exemplos que estou fazendo, comparando com o excel que tenho pronto.

 

1 1452 / 1000 = 1,452 arredonda pra 1,50

2 1871 / 1000 = 1,871 arredonda para 1,90

3 1546 / 1000 = 1,546 arredonda para 1,55

É esses valores arredondados que preciso chegar

 

Se eu usar:

round($valor, 1, PHP_ROUND_HALF_UP) da certo no exemplo 3 e errado no 1 e 2

round($valor, 2, PHP_ROUND_HALF_UP) da certo no exemplo 1 e 2 e errado no 3

Share this post


Link to post
Share on other sites

Copiado do manual:

http://php.net/manual/pt_BR/function.ceil.php

 if( !function_exists('ceiling') )
{
    function ceiling($number, $significance = 1)
    {
        return ( is_numeric($number) && is_numeric($significance) ) ? (ceil($number/$significance)*$significance) : false;
    }
}

Aplicando:

$teste = array(); 
$teste[] = '1.452';
$teste[] = '1.871';
$teste[] = '1.546';


foreach($teste as $t){
    echo $t.' = '.number_format(ceiling($t, '0.05'),2).'<hr>';
}

Saída:

1.452 = 1.50
1.871 = 1.90
1.546 = 1.55

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 edivancastro
      Pessoal veja o seguinte cenario:
       
      Arroz:   71.428571428571%
      Feijão: 14.285714285714%
      Carne:  14.285714285714%
      TOTAL: 99,99999999%

      Preciso fazer arredondamento para no maximo duas casas apos a virgula, pois há situações em que as casas decimais são infinitas ou muito grande para serem exibidas ao usuario, entao aplico a função round do php.
      <?php $novovalor = round($valor, 2); ?> Apos a aplicação desta formula tenho:
      Arroz: 71,43
      Feijão: 14,29
      Carne: 14,29
      TOTAL: 100,01
       
      Enfim, esta tabela com os valores percentuais arredonados acima serão exibidos para o usuario, porém inadequado, pois extrapola os 100%. Gostaria de saber como faço esse arredondamento para que posteriormente a soma nao seja inferior e nem superior a 100%.
       
      Como faço isso?
       
      OBS: NAO POSSO APLICAR ROUND EM TOTAL POIS SERÁ PERCEPTIVEL AO USUARIO O ERRO DA SOMA
    • 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 bruno de assis agues
      Olá meus caros!
       
      Muito bem, após cansar de pesquisar alguma função que resolvesse este meu problema, resolvi correr para os braços de vocês. 
      Estou tentando arredondar o resultado de uma divisão da seguinte forma: 
      resultado = 2.121
      resultado arredondado = 2.13
      Sempre que o valor for maior do que 0 a partir da terceira casa decimal arredonde para cima. 
       
      Desde já, lhes agradeço. 
    • 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!
       
×

Important Information

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