Ir para conteúdo

Arquivado

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

Nightmare SEP

Arredondar com multiplo

Recommended Posts

Boa tarde,

 

Eu dei uma pesquisada mas não encontrei nada a respeito ainda.

 

Eu preciso fazer um arredondamento mas com múltiplos de 50.

 

Ex:

1020 arredondar para 1050

403 arredondar para 450

784 arredondar para 800

 

Tem alguma função que faça isso?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite @Bruno, realmente não tem nenhuma função nativa do PHP que faça isso, mas você pode utilizar isso:

/* Created By Goodeath */
function round_fifty($numero){
  if($numero< 50){
    exit("Número menor que 50");
  }
  $rest = ceil($numero/50);
  $result = $rest*50;
  return $result;
}

Testes:

echo round_fifty(1020)
// 1050
echo round_fifty(403)
// 450
echo round_fifty(784)
//800

Caso queira para um múltiplo menor, utilizar floor em vez de ceil.

 

Por favor marcar o tópico como resolvido, e retribua com um +rep :P .

 

Código criado por mim, e, disponibilizado para uso público.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$numero = 1020;
echo 50 * round( $numero / 50, 0 );

;)

 

Edit: Apenas uma observação... Posso estar enganado, mas creio que seus exemplos estejam incorretos.

 

1020 está mais próximo de 1000 do que de 1050.

403 iria para 400 e não para 450... E por aí vai.

 

O código acima faz exatamente isso... Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$numero = 1020;
echo 50 * round( $numero / 50, 0 );

;)

 

 

Round pode arrendondar para baixo, caso a fração seja menor que {número}.5 ; No caso ele quer que arrendonde só para cima.

 

Edit: Bem, Estão os dois exemplos. Algum vai servir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Round pode arrendondar para baixo, caso a fração seja menor que {número}.5 ; No caso ele quer que arrendonde só para cima.

 

Obrigado pela observação, mas nesse caso basta trocar o round pelo ceil ou floor, como desejado (pra cima ou pra baixo).

 

O fato é que se é pra "arredondar" para aproximar o valor do múltiplo de 50, que foi o que foi descrito no post, o mais correto seria o round mesmo... Mas pelos exemplos, ficou meio confuso.

 

Abraços =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

goodeathx,

Obrigado, já vou testar, e aviso aqui se deu certo no que eu preciso fazer.

 

Matheus Tavares,

A sua lógica está correta, mas é assim mesmo que preciso, preciso que arredonde pra cima.

 

Obrigado pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se ler novamente o que o @Matheus Tavares explicou, poderá ver sobre ceil e floor. Que, no caso, ceil faz exatamente o que você necessita.

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 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 maurohpg
      Bom dia pessoal, estou fazendo um upload múltiplo de imagens, mais estou com um pequeno problema, estou testando e não
      está sendo feito o upload, e não me mostra mensagem de erro algum, revisei o código ja várias vezes e não consigo encontrar
      um erro. Por acaso alguém tem ideia do que pode estar ocorrendo?
      <? include("../config.php"); include("verifica.php"); if($acao ==''){ echo '<form action="album_add.php?acao=add&id='.$id.'" method="post" enctype="multipart/form-data" name="form1"> <p align="center">Imagem<br> <input type="file" name="foto[]" multiple/> </p> <p align="center">Pequena descri&ccedil;&atilde;o<br> <input name="desc_" type="text" size="60" maxlength="250"> </p> <p align="center"> <input type="submit" name="Submit" value="Enviar"> </p> </form>'; }// FECHA principal ?> <?php if(isset($_POST['enviar']) == 'sim'){ $i = 0; foreach($_FILES['foto'] as $k=>$v) { if(!empty($_POST['desc_'][$i]) && !empty($_FILES['foto']['name'])) { // Largura máxima em pixels $largura = 640; // Altura máxima em pixels $altura = 480; // Tamanho máximo do arquivo em bytes $tamanho = 10000; // Verifica se o arquivo é uma imagem $tipos_permitidos = array('pjpeg'=>'image/pjpeg', 'jpeg'=>'image/jpeg', 'jpg'=>'image/jpg', 'gif'=>'image/gif', 'bmp'=>'image/bmp', 'png'=>'image/png' ); foreach($tipos_permitidos as $k=>$v) { if($_FILES['foto']['type'][$i] == $v) { $ext[1] = $k; break; } } if(!isset($ext)) { $error[1] = 'Extensão do arquivo não permitida: ' .$_FILES['foto']['type'][$i]; } // Pega as dimensões da imagem $dimensoes = getimagesize($_FILES['foto']['tmp_name'][$i]); // Verifica se a largura da imagem é maior que a largura permitida if($dimensoes[0] > $largura) { $error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels"; } // Verifica se a altura da imagem é maior que a altura permitida if($dimensoes[1] > $altura) { $error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels"; } // Verifica se o tamanho da imagem é maior que o tamanho permitido if($_FILES['foto']['size'][$i] > $tamanho) { $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes"; } if (!isset($error)) { // Gera um nome único para a imagem $nome_imagem = md5(uniqid(time())) . "." . $ext[1]; // Caminho de onde ficará a imagem $caminho_imagem = "../uploads/album/" . $nome_imagem; // Faz o upload da imagem para seu respectivo caminho move_uploaded_file($_FILES['foto']["tmp_name"][$i], $caminho_imagem); include("resizer_foto_album.php"); $sql = mysql_query("INSERT INTO fotos (id_imovel, foto, obs_foto) VALUES ('$id', '$imagem_nome', '$desc_')") or print(mysql_error()); } else { echo 'Erro(s) encontrado(s)<br>'; foreach($error as $ek=>$ev) { echo $ev. '<br>'; } } } $i++; } } ?>  
    • Por Mozelli
      Olá pessoal.
      Estou querendo criar um campo de preço em uma tabela e defini o tipo como Decimal(6,2), porém quando salvo a alteração o mysql muda o formato do número para (6,0). Quando insiro um valor, por exemplo 6.93, o mysql muda para 7.
      Como resolver isso?
      Desde já, obrigado!
×

Informação importante

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