在javascript中自动添加带小数值的金额

时间:2016-02-18 08:44:19

标签: javascript

我想自动出现(总金额)(Amount Paid和OtherCharges)的总和我该怎么办?

我的总金额不正确,比如说

支付金额= 100.90

其他费用= 10.1

总金额= 100.91

这是我的代码

 $('#AmountPaid, #OtherCharges, #Amount').on('input',function() {

    var AmountPaid = parseFloat($('#AmountPaid').val()).toFixed(2);
    var OtherCharges = parseFloat($('#OtherCharges').val()).toFixed(2);
    var Amount =  parseFloat($('#Amount').val()).toFixed(2);  


    $('#Amount').val(parseFloat(AmountPaid + OtherCharges)).toFixed(2);

    });

});

1 个答案:

答案 0 :(得分:3)

toFixed将您的号码变回字符串。当您将+两个字符串放在一起时,您会得到一个连接字符串,例如100.9010.1。然后你{{}} parseFloat,这将忽略无效的部分,然后给你100.901,这是你toFixed,哪一轮。我不确定为什么你会得到100.91的输入(我得到100.90),但从根本上说这些都是问题。

解决方案是密切关注您何时处理字符串数字。此外,您可能不希望在输出字段(input)上挂钩#Amount,只需要输入字段。

所以:

$('#AmountPaid, #OtherCharges').on('input', function() {
    var AmountPaid = parseFloat($('#AmountPaid').val());
    var OtherCharges = parseFloat($('#OtherCharges').val());
    var Amount =  AmountPaid + OtherCharges;

    $('#Amount').val(Amount.toFixed(2));
});

直播示例:



$('#AmountPaid, #OtherCharges').on('input', function() {
  var AmountPaid = parseFloat($('#AmountPaid').val());
  var OtherCharges = parseFloat($('#OtherCharges').val());
  var Amount = AmountPaid + OtherCharges;

  $('#Amount').val(Amount.toFixed(2));
});

<p>Fill in either of the first two fields, and the third is updated:</p>
<label>
  Amount paid:
  <input type="text" id="AmountPaid" value="100.90">
</label>
<label>
  Other charges:
  <input type="text" id="OtherCharges" value="">
</label>
<label>
  Amount:
  <input type="text" id="Amount" value="">
</label>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

关于使用JavaScript的数字进行财务计算的一般注意事项:Is floating point math broken?