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

如何用JavaScript从字符串取值计算胜率(乒乓球计分板)

解决乒乓球计分板胜率计算问题

核心思路

在添加表格行的逻辑里同步完成胜率计算:获取当前行的胜场数与总比赛数,执行除法运算后格式化结果(比如转百分比、保留小数),再插入到"Win Rate"对应的单元格中。

具体实现示例(JavaScript+HTML场景)

假设你的页面表格结构如下:

<table id="score-table">
  <thead>
    <tr>
      <th>选手姓名</th>
      <th>总比赛数</th>
      <th>胜场数</th>
      <th>胜率</th>
    </tr>
  </thead>
  <tbody>
    <!-- 动态添加的选手数据行 -->
  </tbody>
</table>
<button id="add-data-btn">添加选手数据</button>
<!-- 假设存在对应的输入框 -->
<input type="text" id="player-name" placeholder="选手姓名">
<input type="number" id="total-matches" placeholder="总比赛数">
<input type="number" id="win-count" placeholder="胜场数">

对应的JavaScript逻辑:

document.getElementById('add-data-btn').addEventListener('click', function() {
  // 1. 读取输入的数值并转为数字类型
  const totalMatches = parseInt(document.getElementById('total-matches').value);
  const winCount = parseInt(document.getElementById('win-count').value);
  const playerName = document.getElementById('player-name').value;

  // 2. 计算胜率:处理总比赛数为0的异常情况
  let winRate = 0;
  if (totalMatches > 0) {
    winRate = (winCount / totalMatches) * 100; // 转为百分比
    winRate = winRate.toFixed(2); // 保留两位小数
  }

  // 3. 创建新行并插入表格
  const tableBody = document.getElementById('score-table').querySelector('tbody');
  const newRow = document.createElement('tr');
  
  newRow.innerHTML = `
    <td>${playerName}</td>
    <td>${totalMatches}</td>
    <td>${winCount}</td>
    <td>${winRate}%</td>
  `;
  
  tableBody.appendChild(newRow);

  // 清空输入框(可选)
  document.getElementById('player-name').value = '';
  document.getElementById('total-matches').value = '';
  document.getElementById('win-count').value = '';
});

常见问题排查

  • 变量类型错误:一定要把输入的字符串转为数字类型(用parseInt()/parseFloat()),否则会变成字符串拼接而非数值运算
  • 除数为0的情况:总比赛数为0时直接设胜率为0,避免出现Infinity或NaN
  • 单元格位置错误:确认胜率插入的是当前行对应"胜率"列的单元格,不要插错列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:50:20