JavaScript作业求助:温度平均值计算中Math.round使用及NaN问题解决
解决温度平均值计算的NaN问题与取整需求
我来帮你搞定这两个问题!咱们先理清问题根源,再看修复后的代码:
问题分析
1. 右上角NaN的原因
你的循环遍历了数组的每一行,包括第一行的表头(["City", "00-08", "08-16", "16-24", "Average"])。当处理表头行时:
temp[i][1]是字符串"00-08",和其他字符串相加会得到NaN- 对表头行执行
shift()完全没必要,还会破坏原数组的结构
2. Math.round的正确位置
只需要把计算出的平均值结果用Math.round()包裹,就能实现对数值取整。
修复后的完整代码
<h1>Temperature in different cities (Assignment1)</h1> <div id="container"></div> <script> var temp = [ ["City", "00-08", "08-16", "16-24", "Average"], ["New York", 12, 16, 9], ["London", 13, 15, 10], ["Stockholm", 13, 15, 13], ["Oslo", 14, 16, 15], ["Hong Kong", 13, 14, 12] ]; function printit() { var MyinnerHTML = "<table border='1'>"; for (i = 0; i < temp.length; i++) { // 遍历每一行 MyinnerHTML += "<tr>"; // 先渲染当前行的所有单元格 for (j = 0; j < temp[i].length; j++) { MyinnerHTML += "<td>" + temp[i][j] + "</td>"; } // 只对数据行(非表头)计算平均值 if (i !== 0) { // 计算3个时段的总和,直接取固定索引更可靠 var total = temp[i][1] + temp[i][2] + temp[i][3]; // 计算平均值并取整 var average = Math.round(total / 3); MyinnerHTML += "<td>" + average + "</td>"; } MyinnerHTML += "</tr>"; // 修复原代码的标签错误,应该是</tr>而不是<tr/> } MyinnerHTML += "</table>"; document.getElementById("container").innerHTML = MyinnerHTML; } // 调用函数生成表格 printit(); </script>
关键修改点
- 跳过表头行的平均值计算(通过
if (i !== 0)判断) - 不再修改原数组(移除了
shift()),直接使用固定的3个时段温度索引计算总和,避免数组结构变化带来的问题 - 用
Math.round(total / 3)对平均值取整 - 修复了HTML表格的闭合标签错误(原代码的
<tr/>不符合规范,改为</tr>)
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

