我正在使用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>
答案 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是一项相当繁重的操作。