gildo.rj 0 Denunciar post Postado Novembro 22, 2013 Boa tarde pessoal. Estou com um problema incomum, preciso fazer um tipo de arredondamento de notas e não tem como fazer usando round, exemplo. tenho um cadastro de notas de onde preciso tirar medias de alunos, as medias devem ser calculadas da seguinte forma: nota 1 nota 2 media 7 7 7 7,5 7,5 7,5 7,5 7 7,5 ou seja, se a media der entre 7.1,7.2,7.3 etc... arredonda para 7,5 se a media der 7.6,7.7,7.8 etc arredonda para 8. alguma sugestão? Compartilhar este post Link para o post Compartilhar em outros sites
allex_carvalho 124 Denunciar post Postado Novembro 22, 2013 Tente com ceil. <?php echo ceil(4.3); // 5 echo ceil(9.999); // 10 echo ceil(-3.14); // -3 ?> Compartilhar este post Link para o post Compartilhar em outros sites
Keven Jesus_164006 39 Denunciar post Postado Novembro 22, 2013 intval Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Novembro 22, 2013 ceil($valor); http://php.net/manual/pt_BR/function.ceil.php Compartilhar este post Link para o post Compartilhar em outros sites
Sites Rs 2 Denunciar post Postado Novembro 22, 2013 experimenta algo assim $nota1 = 8.3; $nota2 = 8.8; $media = (($nota1 + $nota2) / (2)); $arr_media = ceil($media); if(($arr_media - $media) >= 0.5 ){ $media_final = floor($media);} else{ $media_final = round($media);} echo $media_final; Compartilhar este post Link para o post Compartilhar em outros sites
EduardoAugustoPHP 27 Denunciar post Postado Novembro 22, 2013 Fala meu amigo. Tenta com esta função: function magicRound($n) { $fn = round($n); $cn = ceil($n); $r = $n - floor($n); if($r === 0.5) return $n; return $fn < $cn ? $fn + 0.5 : $cn ; } Abrá!! intval 7.5 não é inteiro..então nesse caso não rola. Compartilhar este post Link para o post Compartilhar em outros sites
gildo.rj 0 Denunciar post Postado Novembro 22, 2013 Agradeço aos amigos mas não é tão simples assim, acho que terei de criar uma função para executar essa tarefa. Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Novembro 22, 2013 Mas qual a dificuldade? Compartilhar este post Link para o post Compartilhar em outros sites
Sites Rs 2 Denunciar post Postado Novembro 22, 2013 Olha Gildo, a função que te passei está funcionando PERFEITAMENTE. Antes de postar eu testei pra ter certeza.Tu chegou a testar? Compartilhar este post Link para o post Compartilhar em outros sites
Keven Jesus_164006 39 Denunciar post Postado Novembro 22, 2013 agora que eu li direito o post dele viajei com intval Gil fiz uma função bem generica para tu com oque vc precisa :) <?php function Arredondanota($nota){ $separa = explode(".", $nota); if($separa[1] >=6){ $notafinal = $nota[0] + 1; }elseif($separa[1] <= 5 ){ $notafinal = $nota[0] + 0.5; }else{ $notafinal = $nota[0]; } return $notafinal; } echo Arredondanota("7.6"); ?> resultado : 8 tudo que for maior ou igual a 6 é arredondado :) Compartilhar este post Link para o post Compartilhar em outros sites
Caio Cafardo 7 Denunciar post Postado Novembro 22, 2013 Opa, tive que fazer isso a alguns dias, veja: $notaBol = ($notaBol1 + $notaBol2 + $notaBol3 + $notaBol4)/4; $numeroR1 = ceil($notaBol); $numeroR2 = $numeroR1 - $notaBol; if(($numeroR2 <= 0.75) && ($numeroR2 > 0.25)){ $notaBol = $numeroR1 - 0.5; }else if($numeroR2 <= 0.25){ $notaBol = ceil($notaBol); }else{ $notaBol = floor($notaBol); } Se a media for menor que 0,25 para 0 (floor). Se a media for entre 0,25 e 0,75 arredondo pra 0,5. Se a media for maior que 0,75 arredondo pra 0 (ceil). Testado e funcionando! Compartilhar este post Link para o post Compartilhar em outros sites
EduardoAugustoPHP 27 Denunciar post Postado Novembro 22, 2013 Agradeço aos amigos mas não é tão simples assim, acho que terei de criar uma função para executar essa tarefa. Cara, faz um teste na função que eu passei...além de outras que vários amigos postaram aqui. Eu testei a minha e funcionou perfeitamente. function magicRound($n) { $fn = round($n); $cn = ceil($n); $r = $n - floor($n); if($r === 0.5) return $n; return $fn < $cn ? $fn + 0.5 : $cn ; } Compartilhar este post Link para o post Compartilhar em outros sites
gildo.rj 0 Denunciar post Postado Novembro 22, 2013 experimenta algo assim $nota1 = 8.3; $nota2 = 8.8; $media = (($nota1 + $nota2) / (2)); $arr_media = ceil($media); if(($arr_media - $media) >= 0.5 ){ $media_final = floor($media);} else{ $media_final = round($media);} echo $media_final; Obrigado galera, resolvido perfeitamente. Compartilhar este post Link para o post Compartilhar em outros sites
Raul Silva 41 Denunciar post Postado Novembro 22, 2013 Marque o post que resolveu seu problema como Resolvido, aproveite e de um ponto de reputação para a pessoa =) Volte sempre com mais duvidas e para ajudar se vc souber =) Compartilhar este post Link para o post Compartilhar em outros sites