每月分发数据

时间:2014-03-04 15:47:25

标签: php math

目前,我们将时间存储在一个包含百分比字段的表中,以便在一周内分发数据。

例如

| dayint | daytext | hours | percent |
+--------+---------+-------+---------+
|      1 | mon     |     9 |    0.14 |
|      2 | tue     |    15 |    0.23 |
|      3 | wed     |     9 |    0.14 |
|      4 | thu     |     9 |    0.14 |
|      5 | fri     |     0 |    0.00 |
|      6 | sat     |    23 |    0.35 |

我们现在正在添加每月分发以及每周,所以为了计算我:

  1. 获得一个月的周数。
  2.   

    $ weeks = $ days_in_month / 7

    1. 迭代每天的百分比并将其除以周数。
    2.   

      $ percent = $ day ['percent'] / $ week

      如果我的假设是正确的,那么这应该在整个月内均匀分配数据。问题是这个月的额外费用一直是1%。

      如果我输入1000,我得到1013.如果我输入200,我得到202.也许我只是在数学上错了,任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分:0)

如果您的百分比列存储已舍入并在月度计算中使用的数据,而不是显示在其他位置准确存储的舍入结果,则会出现舍入错误。

以下示例显示了三周的结果,之后的表格使用实际数据和四舍五入的数据显示结果。

|Hours|Actual          |Rounded| |Hours|Actual    |Rounded| |Hours|Actual        |Rounded|
|    9|0.13846153846154|   0.14| |   10|0.15625000|   0.16| |    8|0.135593220339|   0.14|
|   15|0.23076923076923|   0.23| |   14|0.21875000|   0.22| |   13|0.220338983051|   0.22|
|    9|0.13846153846154|   0.14| |    8|0.12500000|   0.13| |   11|0.186440677966|   0.19|
|    9|0.13846153846154|   0.14| |   10|0.15625000|   0.16| |    7|0.118644067797|   0.12|
|    0|0.00000000000000|      0| |    1|0.01562500|   0.02| |    2|0.033898305085|   0.03|
|   23|0.35384615384615|   0.35| |   21|0.32812500|   0.33| |   18|0.305084745763|   0.31|
|   65|1.00000000000000|   1.00| |   64|1.00000000|   1.02| |   59|1.000000000000|   1.01|

迭代三周
$percent = $day['percent'] / $weeks

实际列给出结果

0.14343
0.22329
0.14997
0.13779
0.01651
0.32902
1.00000

圆形列给出了

0.146666667
0.223333333
0.153333333
0.14
0.016666667
0.33
1.01

请记住,舍入的结果总是会上升或保持不变,因此错误总是会比您预期的稍微多一点。

答案 1 :(得分:0)

我决定改变我的做法,然后像这样:

  1. 通过循环获取本月的总小时数:

    $total = $total + $day['hours'];
    
  2. 使用存储的小时而不是百分比来计算新百分比:

    $percent = $v['hours']/$total;
    
  3. 此方法返回正确的数据。