求助:使用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
相关产品推荐
相关产品推荐

