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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:36:00