Ir para conteúdo

POWERED BY:

Arquivado

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

gildo.rj

arredondamento.

Recommended Posts

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

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

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

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

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

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

 

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

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

×

Informação importante

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