Ir para conteúdo

Arquivado

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

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

Compartilhar este post


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

Compartilhar este post


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

Compartilhar este post


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

Compartilhar este post


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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas então é aquilo que eu falei.

Você precisa que arredonde sempre pra cima, não?

Usa o round() com a constante de arredondamento pra cima.

round($valor, 2, PHP_ROUND_HALF_UP)

Compartilhar este post


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

Compartilhar este post


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

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por DuRodrig
      Pessoal, bom dia! 
      Estou fazendo uma página com um cálculo simples de porcentagem.
      Existe um formuário que coloco o valor da venda, a comissão é fixa em 13% e a tarifa é um valor que você coloca também.
      Exemplo: (valor da venda) R$ 100,00 - (comissão 13%) - (tarifa) R$ 8,50 = (resultado) R$ 78,50, só que está gerando o resultado de R$ 79,00.
      Como faço para corrgir esse problema?
      Segue o código:

       
      $(function(){ $('#valorVenda').on('input', function() { calculate(); }); $('#tarifa').on('input', function() { calculate(); }); function calculate(){ var pPos = parseFloat($('#valorVenda').val()); var tar = parseFloat($('#tarifa').val()); var result = " "; if(isNaN(pPos) || isNaN(tar)){ }else{ result = ((pPos - ((13.00 * pPos) / 100.00)) - tar).toFixed(2); } $('#total').val(result); } });  
      Desde já agradeço.
    • Por 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
    • 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 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. 
    • 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>
×

Informação importante

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