使用JavaScript和jQuery计算输入值总和时无法累加小数部分的求助
问题根源
代码中使用的~~(双按位非运算符)会将数值强制转换为整数,直接截断所有小数部分,导致小数金额无法参与累加。同时从input字段取出的值默认是字符串类型,建议显式转换为数字类型避免运算异常。
修复方案
把累加逻辑中的~~替换为parseFloat()显式转换为浮点数即可,同时补充浮点数精度处理避免运算误差,修改后的完整代码如下:
$('.cardAccordion').on("change", function() { // 显式转数字,避免字符串运算问题 var lts = Number($(this).find("#lts").val()); var fuelPrice = Number($(this).find("#fuelPrice").val()); var calc = lts * fuelPrice; // 赋值前保留两位小数,避免超长小数 $(this).find("#ltsValue").val(calc.toFixed(2)) }) var res = 0.00; $('#addToCart').click(function() { var val = Number($(this).parents('.cardAccordion').find('#ltsValue').val()); if(val == 0){ $("#lts").css({ borderColor: "#f27474" }) }else{ var qnt = Number($(this).parents('.fuelCard').find('#qntField').val()); $(this).parents('.cardAccordion').find('#ltsValue').each(function () { // 替换原来的~~,转浮点数后运算 res += parseFloat($(this).val()) * qnt; }); // 累加后保留两位小数处理精度问题 res = Number(res.toFixed(2)); var sum = res.toLocaleString("pt-BR", { style: "currency", currency: "BRL" }); $("[name=result]").val(res); $("h3[name=resultText]").text(sum) } })
补充说明
toFixed(2)会将数值保留两位小数,可避免JS浮点数运算的精度异常(例如0.1+0.2得到0.30000000000000004的问题)- 所有从input取值后都做了显式数字类型转换,可避免字符串拼接等非预期运算问题
内容的提问来源于stack exchange,提问作者Jhonata Bonadio
相关产品推荐
相关产品推荐

