JavaScript两位小数相加被取整问题求助(PHP开发者)
问题解决:小数计算被取整的问题
核心原因是你使用了parseInt()解析带小数的数值,这个函数会丢弃小数部分仅保留整数,导致10.25被解析为10、9.75被解析为9,最终总和错误。
修复步骤:
- 替换
parseInt()为parseFloat()(或Number()构造函数),这两个方法能正确解析带小数的字符串:// 原代码 sum = sum + parseInt(document.listForm.choice[i].value); // 修改后 sum = sum + parseFloat(document.listForm.choice[i].value); // 或者更简洁的写法 sum += Number(document.listForm.choice[i].value); - 删除无用代码:
if (o > 1) { sum = sum - 0; },这行代码对数值没有任何实际影响,完全可以移除。
修复后的完整JS代码:
function checkTotal() { document.listForm.total.value = ''; var sum = 0; var o = 0; for (i = 0; i < document.listForm.choice.length; i++) { if (document.listForm.choice[i].checked) { sum += parseFloat(document.listForm.choice[i].value); o++; } } document.listForm.total.value = sum.toFixed(2); }
进阶优化(现代JS写法)
如果想让代码更健壮、符合现代开发规范,可以改用querySelector系列方法,避免依赖旧的表单属性访问方式:
function checkTotal() { const totalInput = document.querySelector('form[name="listForm"] input[name="total"]'); const checkedChoices = document.querySelectorAll('form[name="listForm"] input[name="choice"]:checked'); let sum = 0; checkedChoices.forEach(choice => { sum += parseFloat(choice.value); }); totalInput.value = sum.toFixed(2); }
这样修改后,就能正确计算10.25+9.75+12.50=32.50的结果了。
内容的提问来源于stack exchange,提问作者Steve Caloetta
相关产品推荐
相关产品推荐

