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

求助:使用jQuery计算发票表格行折扣价及汇总总计(代码修复)

解决发票表格折扣价计算与汇总问题

我来帮你搞定这个发票表格的计算问题~你的代码目前有两个核心问题:一是没有先计算每行的折扣价就直接去读取test_sum的内容(它初始是文本"Sum:",转成数字会变成NaN,导致总和完全错误);二是没有关联每行的test_charge和test_discount来计算单行折扣后价格。

修正后的完整代码

// 初始化总计金额为0
let totalSum = 0.0;

// 遍历所有包含test_charge的数据行(自动排除总计行)
$('tr:has(.test_charge)').each(function() {
    // 获取当前行的原价和折扣百分比
    const originalCharge = parseFloat($(this).find('.test_charge').text());
    const discountRate = parseFloat($(this).find('.test_discount').text());
    
    // 计算折扣后价格:原价 × (1 - 折扣百分比/100)
    const discountedPrice = originalCharge * (1 - discountRate / 100);
    
    // 将计算结果填充到当前行的test_sum,保留两位小数适配金额格式
    $(this).find('.test_sum').text(discountedPrice.toFixed(2));
    
    // 累加当前行折扣价到总计
    totalSum += discountedPrice;
});

// 把最终总计填充到total_sum单元格,同样保留两位小数
$('.total_sum').text('Total: ' + totalSum.toFixed(2));

关键逻辑说明

  • 精准定位行:用$('tr:has(.test_charge)')筛选需要计算的数据行,避免误操作总计行
  • 对应行数据关联:通过$(this).find()在当前行内查找对应的test_charge和test_discount,确保每行的计算都是独立且正确的
  • 折扣计算逻辑:公式原价 × (1 - 折扣百分比/100)是行业通用的折扣后价格计算方式(比如50元10%折扣就是50×0.9=45)
  • 金额格式化:toFixed(2)强制保留两位小数,符合发票金额的显示规范
  • 正确的累加顺序:先计算单行折扣价并填充到页面,再累加进总计,确保总计是所有折扣后金额的真实总和

运行效果

执行代码后,你的表格会变成:

<tr>
  <td class="test_charge">50</td>
  <td class="test_discount">10</td>
  <td class="test_sum">45.00</td>
</tr>
<tr>
  <td class="test_charge">40</td>
  <td class="test_discount">5</td>
  <td class="test_sum">38.00</td>
</tr>
<tr>
  <td class="total_sum">Total: 83.00</td>
</tr>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:57