目前,我们将时间存储在一个包含百分比字段的表中,以便在一周内分发数据。
例如
| 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 |
我们现在正在添加每月分发以及每周,所以为了计算我:
$ weeks = $ days_in_month / 7
$ percent = $ day ['percent'] / $ week
如果我的假设是正确的,那么这应该在整个月内均匀分配数据。问题是这个月的额外费用一直是1%。
如果我输入1000,我得到1013.如果我输入200,我得到202.也许我只是在数学上错了,任何帮助都表示赞赏。
答案 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)
我决定改变我的做法,然后像这样:
通过循环获取本月的总小时数:
$total = $total + $day['hours'];
使用存储的小时而不是百分比来计算新百分比:
$percent = $v['hours']/$total;
此方法返回正确的数据。