【发布时间】:2013-10-25 02:17:46
【问题描述】:
假设如下
- 我在一个列表中有 n 个对象
- 对象按顺序处理
- 我想在超过一定数量时显示完成百分比
例如,
我有 2204 个对象,一旦它处理了 221 个对象,我希望它显示 10%,然后一旦它处理了 441 个对象,我希望它显示 20%。基本上是为了让我知道队列在哪里。
用php写这个我有以下内容:
$i = 0;
$total = 2204 // result of getTotal();
foreach (range ($i, $total) as $i ) {
//do some irrelevant processing
if (($i/$total*100)%10 == 0) {
echo number_format(($i/$total*100),0)."% done.\n";
}
}
但是我的结果集不太理想,我得到以下输出:
0% done.
0% done.
0% done.
0% done.
0% done.
0% done.
0% done.
0% done.
0% done.
0% done.
0% done.
0% done.
1% done.
1% done.
1% done.
1% done.
1% done.
1% done.
1% done.
1% done.
1% done.
1% done.
我将如何做到这一点?
【问题讨论】:
-
所以你只想要 0,1,2,3,4,5,6 等?
-
您应该阅读浮点 PHP 参考 :) 无论如何,要“修复”这个问题,请根据条件四舍五入您的值:
if(round($i/$total*100)%10 == 0)... -
@putvande 基本上是的,但对于 10 到 100 的倍数。
-
@onetrickpony 这行得通,但我最终完成了大约 10 0%,10 10% 完成,10 20$ 完成。等等。我只希望它显示一次。
-
然后存储最后一个值,并在下一次迭代中将其与新值进行比较。