Расчет процентов, не дает точного значения

У меня проблема с индикатором выполнения, образованным таблицей и изображением в виде индикатора.

это формирование таблицы

<td><?php echo $img1; ?></td>
<td><?php echo $img2; ?></td>
<td><?php echo $img3; ?></td>
<td><?php echo $img4; ?></td>
<td><?php echo $img5; ?></td>

и это код php:

<?php
$value = 10000 //this value is obtained by SQL
$bar1 = 2600 //is the value of the first bar, obtained by SQL
$bar2 = 9950 //is the value of the second bar, obtained by SQL
$bar3 = 13010 //same as before
$bar4 = 17500 //same as before
$bar5 = 19500 //same as before

if($value > 0) && ($value < $bar1) {
$percent = ($value / $bar1) *100;
$bar1 = '<img src="progress.png" width="'.$percent.'" />';
}

if($value >= $bar1) {
$percent = '100';
$bar1 = '<img src="reached.png" width="'.$percent.'" />';
?>

И для первого бара все в порядке, работайте, как задумано, если значение меньше суммы $ bar1, то оно будет отображаться как прогресс, если вместо этого оно будет выше суммы $ bar1, оно будет отображаться как достигнутое.

Проблемы начинаются с других баров, на примере баров 3:

<?php
if($value > $bar2) && ($value < bar3) {
$percent = ($value / $bar3) *100;
$bar3 = '<img src="progress.png" width="'.$percent.'" />';
}
>?

Очевидно, что ответ процентов составляет: 76 процентов, и он почти полностью заполнить всю планку. Дело в том, что предыдущий бар установлен как 9950, а значение равно 10000, поэтому на $ bar3 (который равен 13010) должно отображаться что-то вроде (между 30 процентами), а не 76 процентов.

Цель проста:

Когда значение $ заполняет $ bar1, затем он движется и начинает заполнять $ bar2, если этот тоже был заполнен, то он перемещается в $ bar3 .. это до тех пор, пока значение $ больше не будет достаточно для заполнения или он достигает последнего $ bar5.

Однако это происходит «неправильно».

Что я в этом ошибаюсь?

0

Решение

Я решил проблему, изменив операцию:

$bar3_reduced = $bar3 - $bar2;
$new = $value - $bar2; //detract from the value the previous bar amount
$percent = ($new / $bar3_reduced)*100;

Так что теперь он сравнивает только прогресс на «новой» панели, а не подсчитывает их все.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]