2012-07-03 19 views
0

我正在使用以下代碼段來計算總價格。這個工程很好,除了#totalPrice在某些場合擴展到例如$ 267.9999999999。在處理價格時,如何將此函數中的#totalPrice重新格式化爲小數點後兩位小數。使用ajax和php的總價格變量限制爲2位小數

function getTotalCost(inventory) { 
    if(inventory) { 
     getTotalParts(inventory); 
     getTotalMarkup(inventory); 
    } 

    var labor = $('#labor').val() * 1; 
    var totals = 0; 
    for(i in totalMarkup) { 
     totals += totalMarkup[i]; 
    } 
    totalCost = totals+labor; 
    /*if(totals == 0) { 
     totalCost = 0; 
    }*/ 
    $('#totalPrice').html(totalCost); 
} 
+0

重複的回答在這裏,我相信http://stackoverflow.com/questions/1726630/javascript-formatting-number-with-exactly-two-小數 – colonelclick

+0

'$('#labor').val()* 1'多麼奇怪的一種方式,用於投射到'Number' ?? !!! – Engineer

+0

我真的很喜歡它:)如果這個值不是數字,你會得到NaN – fmsf

回答

1

您可以:

$('#totalPrice').html(totalCost.toFixed(2)); 

參見:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/toFixed

注意toFixed方法返回一個格式化的數量,因此數量轉換爲字符串。這裏沒有問題,因爲html需要一個字符串,但是請記住,爲了避免串聯字符串,當你期望數字總和時。出於這個原因,我相信你使用$('#labor').val() * 1;。然而這不是必須的,這就像parseFloat更好的使用方法或unary plus operator

var labor = +$('#labor').val(); 
+0

優秀,感謝您的幫助。只是所以我知道爲什麼使用parseFloat或一元更好? –

+0

這取決於你有什麼輸入。我通常更喜歡單數加號,因爲它是一個運算符,因此不是函數調用。但有時'parseFloat'做得更好,如果我真的想「解析」(如方法所述)輸入字符串,而不僅僅是轉換。提供一些具體的例子,如果你有'+「31.40美元」'你會得到'NaN'。相反,使用'parseFloat(「31.40 USD」)''你會有'31.4'作爲數字。請參閱我在答案中提供的鏈接以獲取更多詳細信息 – ZER0

1

使用javascript時,浮點總是不好的。最好你能做的就是圍繞它。

但在這種情況下,你可以做

(totalCost).toFixed(2); 
+0

哈哈編輯翻譯「 af ** k「改爲」不好「:p – fmsf

0

可以使用Math.round函數在JavaScript中是這樣的。

totalCost = Math.round(totalCost*100)/100; 
$('#totalPrice').html(totalCost);