【问题标题】:finding first 1/2 then first whole in incrementing numbers在递增数字中找到第一个 1/2,然后是第一个整数
【发布时间】:2011-04-22 14:42:50
【问题描述】:

我正在使用 php 来运行日期列表。每个工作日的日期都被分配一个百分比 1,然后按百分比递增。

我需要能够标记等于或大于 0.5 的第一个增量,然后标记等于或大于 1 的第一个增量,然后等于或大于 0.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 种方法可以生成此输出,但我们希望帮助您解决 您的 方法。
  • 我应该在哪里发布?在这里作为评论?
  • 否,编辑您的原始问题,并在底部添加。 cmets 不支持代码格式化。

标签: php math increment


【解决方案1】:

counter 设置为 1。继续操作,直到找到大于或等于 counter * 0.5 的值。标记它,将counter 增加 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/>";

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多