|
|
|
| Подскажите, кто силён в математике, как написать универсальную функцию вычисления в процентах,
Например, есть 2, 3, 4 (или больше) вариантов результатов голосования, типа:
1 вариант ответа - 23 ответа
2 -й - 46 ответов
3 -й - 11 ответов
4 -й - 7 ответов. .........
Надо перевести каждое значение в проценты.
В результате должнго быть так:
1-й - столько-то %
2-й - столько-то %
...
Всего 100%
и т.д. в зависимости от кол-ва вариантов ответа.
Примерное начало кода вижу таким:
$kol_var=n (кол-во вариантов ответа);
(for i=0,i<$kol_var,i++){
надо все значения сложить и получить общее число
а потом вычислить процентное значение каждого варианта.
}
|
??? | |
|
|
|
|
|
|
|
для: Владимир22
(02.09.2006 в 15:47)
| | Совершенно верно. А потом
for ($i=1;$i<=$n;$i++) {
$proc[$i]=(100*$golosov[$i]) / $vsego_golosov;
echo $proc[$i];
}
|
На JS без $ надо писать | |
|
|
|
|
|
|
|
для: ExtraBrain
(02.09.2006 в 15:56)
| | А как сложить все значения? | |
|
|
|
|
|
|
|
для: Владимир22
(02.09.2006 в 15:47)
| | хм выходит два цикла...
var DataArr= new Array() //массив с количеством голосовавших по каждому варианту
DataArr[0]=44; // по первому
DataArr[1]=19; // по второму
var all=0; //общее количество
(for i=0,i<DataArr.length,i++){
all+=DataArr[i]; //подсче т общего кол-ва
}
var procent=0;
(for i=0,i<DataArr.length-1,i++){
DataArr[i]=Math.round(DataArr[i]/all*100); //меняем количество на %
procent+=DataArr[i]
}
DataArr[DataArr.length-1]=100-procent; // чтобы из-за округления не вышло более 100% :))
|
| |
|
|
|
|
|
|
|
для: AlexSol
(02.09.2006 в 16:00)
| | Слегка ошибся темой форума.
Я хотел на PHP это сделать... подскажите, пожалуйста. | |
|
|
|
|
|
|
|
для: Владимир22
(02.09.2006 в 16:23)
| | а в чем проблема? меняй var на $ | |
|
|
|
|
|
|
|
для: AlexSol
(02.09.2006 в 16:59)
| | А как можно округлить универсально, т.е. у меня в сумме после всех округлений составляющих получается 99%, а надо - 100$. Я так понимаю, что может закруглить и в 101%.
Как округлять до 100% ровно? | |
|
|
|
|
|
|
|
для: Владимир22
(02.09.2006 в 19:29)
| | внимательнее надо быть:
var procent=0;
(for i=0,i<DataArr.length-1,i++){
DataArr[i]=Math.round(DataArr[i]/all*100); //меняем количество на %
procent+=DataArr[i]
}
DataArr[DataArr.length-1]=100-procent; // чтобы из-за округления не вышло более 100% :))
|
в цикле считаются процентные значения только для всех кроме последнего. для последнего - 100%-подсчитанные значения | |
|
|
|
|
|
|
|
для: AlexSol
(02.09.2006 в 19:48)
| | Спасибо, AlexSol !
Но мне надо в php
Вот проверочный скрипт, в конце выводит 99%. Как можно закруглить до 100%?
<?
$golos1="124"; //ответ "Хорошо" - 25 человек
$golos2="218"; //ответ "Плохо" - 22 человека
$golos3="847"; //ответ "Так себе" - 26 человек
$all_golos=$golos1+$golos2+$golos3; // общее число голосов
$golos1_=round($golos1/$all_golos*100);
$golos2_=round($golos2/$all_golos*100);
$golos3_=round($golos3/$all_golos*100);
$golos_all_proz=round($golos1_+$golos2_+$golos3_); // общее число процентов
echo "$golos1 - $golos1_%<br>";
echo "$golos2 - $golos2_%<br>";
echo "$golos3 - $golos3_%<br>";
echo "$all_golos - $golos_all_proz%"; // выводит 99% !!!!!
?>
|
| |
|
|
|
|
|
|
|
для: Владимир22
(02.09.2006 в 20:11)
| | тебе сегодня везет! я прочитал первые 150 страниц самоучителя php5 :)
<?php
$golos[0]=124; //ответ "Хорошо" - 25 человек
$golos[1]=218; //ответ "Плохо" - 22 человека
$golos[2]=847; //ответ "Так себе" - 26 человек
$save=0;
for($i=0;$i<count($golos);$i++){
if($i!=count($golos)-1){
$golos[$i]=round($golos[$i]/array_sum($golos)*100);
$save+=$golos[$i];
}else{
$golos[$i]=100-$save;
}
echo($golos[$i].'%');
echo('<br>');
}
?>
|
| |
|
|
|