Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
Eu estava usando:
round ($a, 2);
E ficava com as duas casas decimais. Nem tinha pensando, mas fazendo
round ($a, 1);
Já arredonda como preciso.
Era tão óbvio,
Obrigado
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. ;)
Muito bom André Manoel. Obrigado.
Obrigado todo mundo pelas dicas. Me ajudaram muito.
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.
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.
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
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)
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
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;
}
}$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
ESerra, é isso mesmo!!
Consegui aplicar aqui a sua função de acordo com que preciso. Funcionou corretamente.
Muito obrigado!!
http://php.net/manual/pt_BR/function.round.php