Ir para conteúdo

POWERED BY:

Arquivado

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

Fábio Diniz - Frutal/MG

[Resolvido] Sistema de Média de Alunos - Arredondar notas

Recommended Posts

Bom dia a todos!

 

Estou desenvolvendo um sistema de média, e a única coisa que ele faz é somar quatro notas e dividir por quatro para sair a média. Mas as vezes saem número picados e eu precisava arredondar esses números.

Por exemplo: o aluno tirou 6.4, arredonda-se para 6.5. Se ele tirou 6.7, arredonda-se pra 6.5 também. Se for 6.8, arredonda-se para 7.0. Já consegui fazer ele arredondar (seguindo estes exemplos: 6.4, 6.5, 6.7 e 6.8) para 6 e em outros casos para 7, mas 6.5 não estou conseguindo.

 

Alguma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, nativamente, isto é com as funções matemáticas já existentes é capaz de não conseguir.

 

floor() arrendonda para o inteiro imediatamente abaixo do valor passado, no seu caso 6.

ceil() arredonda para o inteiro imediatamente acima do valor passado, no seu caso 7

round(), por padrão, arredonda pelo decimal, como na matemática "normal" (não que Matemática seja algo normal :P)

 

Testando as três funções tentando arredondar 6.7, dá nisso.

 

]ceil(): 7

floor(): 6

round(): 7

Se você quiser algo mais personalizado, vai ter que quebrar tratar o número como string e analisar manualmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá sim, ´é só truncar o valor no ponto, pegar a parte depois do ponto e colocar numas condições elseif e depois juntar te novo

 

te construo facil, mas me diz umas questões, e se o valor der exatos 7,25 vai arredondar para 7 ou 7,5?

e a mesma pergunta para 7,75

 

Como eu não sei aonde você trabalha e posso ter algum parente estudando ai fui bomzinho e nesses cassos sempre arredondei para cima ficando assim:

 

function arred($valor) 
{
$numero = explode(".", $valor);//separa a string no ponto
       // analisa a nota e aplica a arredondamento
if ($valor<($numero[0].".25")) $numero[1]=0;
elseif (($valor>=($numero[0].".25"))AND($valor<($numero[0].".75"))) $numero[1]=5;
elseif ($valor>=($numero[0].".75"))
{
$numero[0]++;
$numero[1]=0;
}
return $numero[0].'.'.$numero[1];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer diretamente na consulta ao banco de dados.

É basicamente usar o AVG() para selecionar, depois round() para arredondar.

Poste sua estrutura do banco, e sua consulta atualmente, que te ajudamos. O resultado final será mais satisfatório.

 

EDIT: Fiz um exemplo em PHP também... Veja:

<?php
function average( $values = array() , $precision = 2 ) {
$precision = (int)$precision;
if ( is_array( $values ) ) {
	$sum = array_sum( $values );
	$count = count( $values );
	return round ( $sum / $count , $precision );
}
if ( is_float( $values ) ) {
	return round( $values , $precision );
}
}

$data[] = 3.45;
$data[] = 4.89;
$data[] = 1.9;

echo average( $data );
echo '<br />';
echo average( 2.34 );

Resultado

3.41

2.34

 

A função retorna a média, se entregar array, ou o valor arredondado, se entregar float.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho...

 

function arred($valor)

{

$numero = explode(".", $valor);//separa a string no ponto

// analisa a nota e aplica a arredondamento

if ($valor<($numero[0].".25")) $numero[1]=0;

elseif (($valor>=($numero[0].".25"))AND($valor<($numero[0].".75"))) $numero[1]=5;

elseif ($valor>=($numero[0].".75"))

{

$numero[0]++;

$numero[1]=0;

}

return $numero[0].'.'.$numero[1];

}

 

$teste=8.26;

$arr=arred($teste);

 

 

echo $arr;

 

aqui está aparecendo 8.5

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.