.each(function()不适用于浮点值

时间:2017-10-08 16:56:47

标签: javascript jquery

输出应为543.54但我得542.00。请帮我修一下我做错了什么。先谢谢你。



function getTotal() {
  var gtotal = 0.00;
  $(".sub_total").each(function() {
    subtotal = $(this).html() | 0;
    gtotal = parseFloat(gtotal) + parseFloat(subtotal);
  });
  var gtotal = gtotal.toFixed(2);
  $(".grand_total").html(gtotal);
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sub_total">267.33</div>
<div class="sub_total"></div>
<div class="sub_total">252.55</div>
<div class="sub_total">23.66</div>
<div class="grand_total"></div>
<a href="javascript:void(0);" onclick="getTotal()">Sum</a>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

问题是因为您使用的是按位OR运算符,而不是逻辑 OR运算符。

请注意,您可以使用+=增加gtotal,将最后两行连接到一个,并使用不显眼的事件处理程序而不是丑陋的on*来整理逻辑事件属性:

$(function() {
  $('#sum').click(function(e) {
    e.preventDefault();
    var gtotal = 0.00;

    $(".sub_total").each(function() {
      subtotal = $(this).html() || 0; // note || here
      gtotal += parseFloat(subtotal);
    });

    $(".grand_total").html(gtotal.toFixed(2));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sub_total">267.33</div>
<div class="sub_total"></div>
<div class="sub_total">252.55</div>
<div class="sub_total">23.66</div>
<div class="grand_total"></div>
<a href="#" id="sum">Sum</a>

答案 1 :(得分:1)

您使用bitwise OR |代替logical OR ||获取默认值。

按位OR转换为32位整数值,并使用值执行OR运算。

function getTotal() {
  var gtotal = 0;                    // 0
  $(".sub_total").each(function() {
    subtotal = +$(this).html() || 0; // default value
    gtotal = gtotal + subtotal;      // no need to convert numbers again to numbers
  });
  var gtotal = gtotal.toFixed(2);
  $(".grand_total").html(gtotal);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sub_total">267.33</div>
<div class="sub_total"></div>
<div class="sub_total">252.55</div>
<div class="sub_total">23.66</div>
<div class="grand_total"></div>
<a href="javascript:void(0);" onclick="getTotal()">Sum</a>