You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发带结果页的投票系统时,无投票场景下出现NaN计算错误的修复求助

解决投票系统无投票记录时的NaN计算错误问题

你遇到的这个NaN问题很典型——当没有任何投票记录时,$total_votes的值为0,这时候执行$poll_answer['votes'] / $total_votes就会触发0除以0的运算,直接产生NaN。之前用@错误抑制只是掩盖了错误提示,并没有从根源解决问题,这里给你几个实用的修复方案:

方案一:直接用三元运算符做前置判断

这是最直观的解决方案,先检查总票数是否为0,避免除以0的情况:

<div class="progress-bar" style="background-color: #38b673; width:<?= $total_votes == 0 ? '0' : round(($poll_answer['votes'] / $total_votes) * 100) ?>%"> 
    <?= $total_votes == 0 ? '0' : round(($poll_answer['votes'] / $total_votes) * 100) ?>% 
</div>

当总票数为0时,进度条宽度和显示百分比直接设为0;有投票记录时再执行正常的百分比计算,彻底规避NaN问题。

方案二:封装成可复用的函数(适合多处使用的场景)

如果你的系统中有多处需要计算投票百分比,可以把逻辑封装成函数,让代码更整洁易维护:

// 先定义计算函数
function calculateVotePercentage($votes, $totalVotes) {
    if ($totalVotes <= 0) {
        return 0;
    }
    return round(($votes / $totalVotes) * 100);
}

// 模板中调用函数
<div class="progress-bar" style="background-color: #38b673; width:<?= calculateVotePercentage($poll_answer['votes'], $total_votes) ?>%"> 
    <?= calculateVotePercentage($poll_answer['votes'], $total_votes) ?>% 
</div>

这样后续修改计算逻辑时,只需要修改函数即可,不用逐个页面调整代码。

方案三:用max()函数确保分母不为0(应急简化方案)

如果你想快速修改,也可以用max()函数让分母至少为1,避免除以0:

<div class="progress-bar" style="background-color: #38b673; width:<?= round(($poll_answer['votes'] / max($total_votes, 1)) * 100) ?>%"> 
    <?= round(($poll_answer['votes'] / max($total_votes, 1)) * 100) ?>% 
</div>

当总票数为0时,max($total_votes, 1)会返回1,此时0除以1结果为0,同样能避免NaN。不过这个方案的可读性稍差,优先推荐前两种。

内容的提问来源于stack exchange,提问作者BvstedCrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 03:47:28