toFixed(2)不能四舍五入吗?

时间:2019-12-03 12:04:38

标签: javascript jquery

我正在使用toFixed(2),但是它没有四舍五入,我找不到原因?

表格

<div class="col col-sm-2"><%= f.input :price, placeholder: "Price incl. VAT", label: false, input_html:{class: "field price"}  %></div>
<div class="col col-sm-2 "><%= f.input :amount, label: false, input_html:{class: "field quantity"} %></div>
<div class="col col-sm-2"><input type="text" class="field subtotal form-control"></div>

脚本

<script>
//on change
  $('.field').keyup(function() {
      var price = [];
      var quantity = [];

      $('.price').each(function(i, obj) {
          price.push(+obj.value);
      });

      $('.quantity').each(function(i, obj) {
          quantity.push(+obj.value);
      });

      console.log(price)
      console.log(quantity)

      var result = 0;

      price.map((o,i)=>{
      $(".subtotal").eq( i ).val(o*quantity[i]);
      result += o*quantity[i];
      });

      result = parseFloat(result).toFixed(2)

      $(".result").val(result);
  })

</script>

1 个答案:

答案 0 :(得分:1)

Number.prototype.toFixed()不舍入数字。使用Math.round()来完成。另外,result已经具有类型Number,因此parseFloat几乎没有用。代替:

result = parseFloat(result).toFixed(2)

使用:

result = Math.round(result);

请注意,请勿使用.map来代替.forEach,这意味着:

price.map((o,i)=>{
  $(".subtotal").eq( i ).val(o*quantity[i]);
  result += o*quantity[i];
});

应该是这样:

price.forEach((o, i) => {
  $(".subtotal").eq( i ).val(o*quantity[i]);
  result += o*quantity[i];
});

此外,我建议查询DOM一次而不是多次,因为遍历DOM是一项相当繁重的操作。