我试图根据用户输入计算总价格,但我遇到了浮点综合症。我已经检查了其他几个答案,但不能使它适用于我自己的代码。 我做错了什么?
$(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);
});
});
答案 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});