Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Функция вычисление процентов (задачка для математиков)
 
 автор: Владимир22   (02.09.2006 в 15:47)   письмо автору
 
 

Подскажите, кто силён в математике, как написать универсальную функцию вычисления в процентах,
Например, есть 2, 3, 4 (или больше) вариантов результатов голосования, типа:
1 вариант ответа - 23 ответа
2 -й - 46 ответов
3 -й - 11 ответов
4 -й - 7 ответов. .........
Надо перевести каждое значение в проценты.
В результате должнго быть так:

1-й - столько-то %
2-й - столько-то %
...
Всего 100%
и т.д. в зависимости от кол-ва вариантов ответа.

Примерное начало кода вижу таким:

$kol_var=n (кол-во вариантов ответа);
(for i=0,i<$kol_var,i++){
надо все значения сложить и получить общее число
а потом вычислить процентное значение каждого варианта.
}

???

   
 
 автор: ExtraBrain   (02.09.2006 в 15:56)   письмо автору
 
   для: Владимир22   (02.09.2006 в 15:47)
 

Совершенно верно. А потом

for ($i=1;$i<=$n;$i++) {
  $proc[$i]=(100*$golosov[$i]) / $vsego_golosov;
  echo $proc[$i];
}


На JS без $ надо писать

   
 
 автор: Владимир22   (02.09.2006 в 15:58)   письмо автору
 
   для: ExtraBrain   (02.09.2006 в 15:56)
 

А как сложить все значения?

   
 
 автор: AlexSol   (02.09.2006 в 16:00)   письмо автору
 
   для: Владимир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% :))

   
 
 автор: Владимир22   (02.09.2006 в 16:23)   письмо автору
 
   для: AlexSol   (02.09.2006 в 16:00)
 

Слегка ошибся темой форума.
Я хотел на PHP это сделать... подскажите, пожалуйста.

   
 
 автор: AlexSol   (02.09.2006 в 16:59)   письмо автору
 
   для: Владимир22   (02.09.2006 в 16:23)
 

а в чем проблема? меняй var на $

   
 
 автор: Владимир22   (02.09.2006 в 19:29)   письмо автору
 
   для: AlexSol   (02.09.2006 в 16:59)
 

А как можно округлить универсально, т.е. у меня в сумме после всех округлений составляющих получается 99%, а надо - 100$. Я так понимаю, что может закруглить и в 101%.
Как округлять до 100% ровно?

   
 
 автор: AlexSol   (02.09.2006 в 19:48)   письмо автору
 
   для: Владимир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%-подсчитанные значения

   
 
 автор: Владимир22   (02.09.2006 в 20:11)   письмо автору
 
   для: 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% !!!!!
?>

   
 
 автор: AlexSol   (02.09.2006 в 20:56)   письмо автору
 
   для: Владимир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>');
}
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования