2016-08-17 82 views
0

我想根據用戶輸入計算總價格,但我遇到了浮點綜合症。我已經檢查了其他幾個答案,但是不能使它適用於我自己的代碼。 我在做什麼錯?在jQuery中爲整數設置爲2位小數

$(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

錯誤在別處。你的代碼是[作品](https://jsfiddle.net/vx6m17hf/1/)。 –

+0

只需$(「#ticket-select-adult」)。val()'。或者放棄構造並處理,就像我的答案一樣。 – raina77ow

回答

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

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

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

代替parseInt函數,使用parseFloat的。做乘法然後用於修改

parseInt將數字更改爲一個整數。

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

不,不會解決任何問題 –

+0

但總的來說,這是一個正確的方法 - 只是其中的一部分。我們必須寫出結合'parseFloat'的值和'toFixed(2)'累計結果的答案。 ) – raina77ow

+0

@ShadowWizard:編輯 –

0

試試這個:

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

很好,但在WebKit(= iOS Safari)中不受支持。 – raina77ow

+0

也許在safari上使用類似toLocaleString()的庫是解決方案。 – grec0o