Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal.
Estou com o seguinte problema.
Tenho um sistema de avaliacoes de casas, onde cada pessoa faz uma avaliação com base em 6 critérios e pra cada critério e dada uma nota de 1 a 10 e dessa nota eu consigo uma media com base na soma das notas e depois dividindo por 6.
exemplo (6+4+3+5+8+5 = 31 / 6 = 5.1 de media)
ate ai tudo bem, o problema e que tenho q pegar todas as avaliacoes dos usuários e lançar uma media geral semelhante a avaliação acima, porem se eu somar todas as avaliacoes eu vou ter um resultado de mais de dois dígitos de media.
exemplo (520 / 6 = 86.6)
Eu preciso de uma media de dois dígitos mesmo somando todas as avaliacoes.
alguém sabe como resolvo isso?
A quantidade de pessoas que votaram * 6 n entendia sua logica...
Se eu entendi sua explicação cada pessoa dá uma nota para cada critério, são 6 critérios então são 6 notas por pessoa, logo para 3 pessoas existem 18 notas.
Caso tenha dúvidas o calculo da média simples é SOMA_DOS_VALORES / QUANTIDADE_DE_VALORES.
A tabela abaixo mostra o cálculo e até algumas variações que você pode aplicar se já possuir alguma outra média calculada.
PESSOA |NOTA_1|NOTA_2|NOTA_3|NOTA_4|NOTA_5|NOTA_6|SOMA |MEDIA |MEDIA_GERAL
HwapX | 10| 8| 8| 7| 5| 9| 47|(47/6)= 7,83|
manoaj | 9| 9| 9| 7| 8| 10| 52|(52/6)= 8,66|
imasters | 7| 8| 8| 9| 6| 10| 48|(48/6)= 8,00|
===========================================================================|
| 24,49|(24,49/3)=8,16
SOMA GERAL | 26| 25| 25| 23| 19| 19| 147| |(147/18) =8,16
MEDIA NOTA | 8,66| 8,33| 8,33| 7,66| 6,33| 9,66|48,97| |(48,97/6)=8,16
Um exemplo via SQL em um banco com uma estrutura de tabela acima seria:
SELECT SUM(NOTA_1 + NOTA_2 + NOTA_3 + NOTA_4 + NOTA_5 + NOTA_6) / (COUNT(*) * 6) FROM tabela;
No PHP você poderia fazer algo como.
<?php
$notas = [
'HwapX' => [10, 8, 8, 7, 5, 9],
'manoaj' => [9, 9, 9, 7, 8, 10],
'imasters' => [7, 8, 8, 9, 6, 10]
];
/Média/
$media = array_reduce($notas, function($total, $por_pessoa) {
return $total + array_sum($por_pessoa);
}, 0) / (count($notas) * 6);$total = 0;
foreach($notas as $por_pessoa) {
$total += array_sum($por_pessoa);
}
$media = $total / (count($notas) * 6);
Divida pela quantidade de notas que você somou para chegar no resultado provavelmente deve ser algo como (QTD_PESSOAS 6)*.