排查JavaScript中百分比计算函数的问题
排查JavaScript百分比计算函数的问题
让我仔细梳理下这个百分比计算函数存在的问题,一个个来拆解:
语法错误:缺少闭合括号
在p1Percent的计算行里,最后少了一个闭合的小括号:var p1Percent = ((scores.p1 / totalGames) * 100;正确写法应该补上末尾的
):var p1Percent = ((scores.p1 / totalGames) * 100);未定义变量引用错误
alert语句里的p1没有被定义过,你代码里的玩家1得分是scores.p1,这里应该是想显示玩家名称?比如如果是指代"Player 1",应该写成字符串"Player 1";如果是想显示得分,那应该用scores.p1,不然会抛出ReferenceError: p1 is not defined的错误。字符串拼接语法错误
alert里p1Percent "%!这部分少了一个+号,导致语法失效,正确的拼接应该是p1Percent + "%!"。除以零的风险
如果totalGames的计算结果是0(也就是所有得分加起来为0,没有进行过游戏),那所有百分比计算都会得到NaN(非数值),这时候需要做前置判断,比如:if (totalGames === 0) { alert("还没有进行任何游戏哦!"); return; }数值精度优化(可选但友好)
直接计算出来的百分比可能会是很长的小数(比如33.3333333333%),可以用toFixed(n)方法保留指定小数位数,让显示更美观,比如保留1位小数:drawPercent.toFixed(1)。
修正后的完整代码示例
var percent = function() { var totalGames = scores.draw + scores.p1 + scores.Ali; // 处理无游戏的情况 if (totalGames === 0) { alert("还没有进行任何游戏哦!"); return; } var drawPercent = ((scores.draw / totalGames) * 100).toFixed(1); var AliPercent = ((scores.Ali / totalGames) * 100).toFixed(1); var p1Percent = ((scores.p1 / totalGames) * 100).toFixed(1); alert("There has been " + drawPercent + "% of draws. I won " + AliPercent + "%, and Player 1 won " + p1Percent + "%!"); }
内容的提问来源于stack exchange,提问作者K Will
相关产品推荐
相关产品推荐

