在jQuery中为整数设置为2位小数

时间:2016-08-17 11:38:12

标签: jquery

我试图根据用户输入计算总价格,但我遇到了浮点综合症。我已经检查了其他几个答案,但不能使它适用于我自己的代码。 我做错了什么?

$(document).ready(function (e) {
    $("select").change(function () {
        var adultTicketsSubtotal = 0;
        var adultPrice = $("#price-adult").data("price");
        $("#ticket-select-adult").each(function () {
            adultTicketsSubtotal = adultPrice * parseInt($(this).val()).toFixed(2);
        })
        $("#adult-total .total").html(adultTicketsSubtotal);
    });
});

4 个答案:

答案 0 :(得分:3)

这是一种可行的方法:

$(function() {
  var $subtotalView = $("#adult-total .total");
  var adultPrice = parseFloat( $("#price-adult").data("price") );
  // TODO: handle NaN case somehow: what if server sets this incorrectly?

  $('#ticket-select-adult').change(function() {
    var ticketsCount = parseInt( this.value, 10 );
    var subtotal = isNaN(ticketsCount) ? 
      ' n/a ' : 
      (ticketsCount * adultPrice).toFixed(2);
    $subtotalView.text(subtotal);
  });
});

这里有一些细微的变化:DOM遍历被最小化,this.value取代$(this).val()等。重要的是类型固定:adultPrice 总是一个浮点数, ticketsCount始终为int(或占位符值的NaN,但处理此情况),subtotal始终是给定格式的字符串。

答案 1 :(得分:1)

您需要使用.toFixed()方法,如:

$("#adult-total .total").html(adultTicketsSubtotal.toFixed(2));

答案 2 :(得分:1)

使用parseFlo代替parseInt。进行乘法,然后使用toFixed

parseInt将数字更改为整数。

adultTicketsSubtotal = (adultPrice * (parseFloat($(this).val()))).toFixed(2);

答案 3 :(得分:0)

试试这个:

adultTicketsSubtotal = adultPrice.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});