好吧,在开始之前,我想指出,我知道除以零是不好的。我想知道的是,避免这种情况的最佳方法是什么。
在我的 CMS 中,我尝试显示最近注册的注册用户数量。我显示的第一个统计数据是“今日注册用户”,显示该值相对于昨天的值是上升还是下降,并将其显示为正/负百分比。
阅读关于 SO 的其他问题,人们建议如果其中一个值等于 0,则完全避免计算,但如果昨天有 0 个注册用户,今天有 20 个注册用户,那么我需要显示一个明确的增加 - 我不能只显示任何内容。
我创建了这个查询:
SELECT
COUNT(CASE WHEN DATEDIFF(HOUR, CURDATE(), created) <= 24 THEN user_id
ELSE NULL END) AS 1day,
COUNT(CASE WHEN DATEDIFF(HOUR, CURDATE(), created) >= 25 AND DATEDIFF(HOUR, CURDATE(), created) <= 48 THEN user_id
ELSE NULL END) AS 1to2days,
... other cases ...
FROM users
这个函数:
function diff_percent($a, $b) {
$c = ($a > $b) ? ($a-$b)/$a*-100 : ($b-$a)/$b*100;
return $c;
}
只需通过以下方式调用它:
echo diff_percent($row['1to2days'], $row['1day']);
我可以很容易地使用 SQL 将零转换为 null,或者如果检测到零,我可以停止函数中的计算,但正如我上面提到的,如果昨天有 0 个用户,今天有 20 个用户,我必须显示过去24小时内用户数量大幅增加。解决这个问题的最佳方法是什么?如果 todays_users > Tuesdays_users
但 yesterdays_users == 0
我是否只显示“增长 100%”?我的数学很差,我很困惑 - 请帮助。
最佳答案
“好吧,在开始之前,我想指出,我知道除以零不好。我想知道的是,避免这种情况的最佳方法是什么。”
- 不要除以零!
在进行计算之前添加额外的检查,如果遇到零则进行适当的处理。即显示不同的消息而不是百分比。
关于php - 警告 : Division By Zero - Calculating percentages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684069/