好的,在开始之前,我想指出,我知道除以零是不好的。我想知道的是,避免这种情况的最佳方法是什么。
在我的 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 > yesterdays_users
但yesterdays_users == 0
我是否只显示“Up By 100%”?我的数学很差,我很困惑 - 请帮忙。