#php #math #increment
#php #математика #увеличение
Вопрос:
Я использую php для просмотра списка дат. Каждой дате, которая является днем недели, присваивается процент от 1, затем увеличивается на процент.
Мне нужно иметь возможность помечать первое приращение, равное или выше .5 затем первое приращение, равное или выше 1, затем впоследствии равное или выше .5 затем одинаковое для каждого целого числа.
Проблема, с которой у меня возникают проблемы, на самом деле заключается не в нахождении числа для пометки, а в игнорировании результата, пока он не появится снова.
Я не могу округлить больше, чем у меня есть, поскольку округление мимо этого в долгосрочной перспективе повредит любой стороне по-разному.
Вот вывод небольшой части того, что у меня есть, в надежде, что это имеет больше смысла.
2011-03-06 Weekend
2011-03-07 Earned: 0.096154 Accrued: 0.096154
2011-03-08 Earned: 0.096154 Accrued: 0.192308
2011-03-09 Earned: 0.096154 Accrued: 0.288462
2011-03-10 Earned: 0.096154 Accrued: 0.384615
2011-03-11 Earned: 0.096154 Accrued: 0.480769
2011-03-12 Weekend
2011-03-13 Weekend
2011-03-14 Earned: 0.096154 Accrued: 0.576923 <- should be marked
2011-03-15 Earned: 0.096154 Accrued: 0.673077
2011-03-16 Earned: 0.096154 Accrued: 0.769231
2011-03-17 Earned: 0.096154 Accrued: 0.865385
2011-03-18 Earned: 0.096154 Accrued: 0.961538
2011-03-19 Weekend
2011-03-20 Weekend
2011-03-21 Earned: 0.096154 Accrued: 1.057692 <- should be marked
2011-03-22 Earned: 0.096154 Accrued: 1.153846
2011-03-23 Earned: 0.096154 Accrued: 1.25
2011-03-24 Earned: 0.096154 Accrued: 1.346154
2011-03-25 Earned: 0.096154 Accrued: 1.442308
2011-03-26 Weekend
2011-03-27 Weekend
2011-03-28 Earned: 0.096154 Accrued: 1.538462 <- should be marked
2011-03-29 Earned: 0.096154 Accrued: 1.634615
2011-03-30 Earned: 0.096154 Accrued: 1.730769
2011-03-31 Earned: 0.096154 Accrued: 1.826923
2011-04-01 Earned: 0.096154 Accrued: 1.923077
2011-04-02 Weekend
2011-04-03 Weekend
2011-04-04 Earned: 0.096154 Accrued: 2.019231 <- should be marked
2011-04-05 Earned: 0.096154 Accrued: 2.115385
2011-04-06 Earned: 0.096154 Accrued: 2.211538
2011-04-07 Earned: 0.096154 Accrued: 2.307692
2011-04-08 Earned: 0.096154 Accrued: 2.403846
2011-04-09 Weekend
2011-04-10 Weekend
2011-04-11 Earned: 0.096154 Accrued: 2.5 <- should be marked
2011-04-12 Earned: 0.096154 Accrued: 2.596154
2011-04-13 Earned: 0.096154 Accrued: 2.69230
Добавление запрошенного кода. Здесь много выходных данных, поэтому я могу видеть, что он делает. это будет удалено, как только я узнаю, что он делает то, что мне нужно.
Обратите внимание на $ x, здесь он статичен, но будет динамическим, поэтому я должен быть обеспокоен тем, что в первой десятичной точке не всегда может быть 5, чтобы сказать мне, что это около 1/2
$startDate = '2011-01-01';
$x= 25/260;
$y = 0;
while (strtotime($startDate) <= strtotime($today)) {
echo $startDate;
if(is_weekday($startDate)) {
$y = $x $y;
print ' Earned: '.round($x,6).' Accrued: '.round($y,6).'<br />';
} else {
print ' Weekend <br />';
}
$startDate = date ('Y-m-d', strtotime(' 1 day', strtotime($startDate)));
}
Комментарии:
1. можете ли вы также опубликовать свой код? вероятно, существует > 1 способ генерирования этого вывода, но мы хотели бы помочь вам исправить ваш способ его выполнения.
2. Где я должен это опубликовать? Здесь в качестве комментария?
3. нет, отредактируйте свой первоначальный вопрос и добавьте внизу. комментарии не поддерживают форматирование кода.
Ответ №1:
Установите counter
значение 1. Продолжайте, пока не найдете значение, большее или равное counter * 0.5
. Отметьте это, увеличьте counter
на 1 и повторите.
Комментарии:
1. Это то, что, кажется, работает (поэтому я пометил это как свой ответ). Меня беспокоит то, что, как я добавил в своей правке, $ x будет динамическим, и если это все еще будет работать, то.
Ответ №2:
$count = 1;
while(your loop for displaying said content, foreach() maybe)
{
echo "{$timestamp} Earned: {$earned} Accrued: {$accrued}";
if($accrued > ($count * 0.5)) { echo "<- should be marked"; $count ;}
echo "<br/>";
}