2011-04-04 118 views
4

我在網站上有一個頁面,用於計算出租的費率總計,這是可選的。如果您選擇或取消選擇複選框選項,則javascript只會提供更新的總數。Javascript - 計算貨幣總計

這是我試過的。它看起來可行,但是對於其中一個複選框,每增加一個點擊就會增加2美分,我相信是因爲修正了一輪。我怎樣才能保持數字四捨五入?

function update_rate(state, amount, field) { 
     if (state == true) { 
      rate = parseFloat($('span.rateTotal').text()) + amount; 
      rate = rate.toFixed(2); 
      due = parseFloat($('span.'+field).text()) + amount; 
      due = due.toFixed(2); 
      $('span.rateTotal').text(rate); 
      $('span.'+field).text(due); 
     } else { 
      rate = parseFloat($('span.rateTotal').text()) - amount; 
      rate = rate.toFixed(2); 
      due = parseFloat($('span.'+field).text()) - amount; 
      due = due.toFixed(2); 
      $('span.rateTotal').text(rate); 
      $('span.'+field).text(due); 
     } 
    } 

複選框HTML:

<cfinput type="checkbox" name="linen_service" id="linen_service" checked="checked" value="0" onClick="update_rate(this.checked, #reservationQuery[7].xmlChildren[i]['dblAmount'].xmlText#, 'second-due');" /> 

基本上通過在選項,複選框的狀態,並且應當影響字段的名稱的量。

編輯:小提琴網址:http://jsfiddle.net/nGrVf/6/

+0

toFixed不是一個JavaScript本地函數。你可以請你發佈該方法的代碼。 – 2011-04-04 13:34:06

+3

你有沒有嘗試先固定然後parseFloat? @Evan toFixed是一個JavaScript原生函數https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/toFixed – kjy112 2011-04-04 13:35:15

+2

如果你可以設置一個[jsFiddle](http://jsfiddle.net/)場景它會幫助我們幫助。 – ExtraGravy 2011-04-04 13:39:13

回答

0

我能想起來的最簡單的解決辦法是圓下來(使用MULS和floor):即

rate = Math.floor(rate * 100)/100; 

編輯:位的測試之後,我發現給定的代碼沒有問題。這意味着計算錯誤來自代碼的另一部分或來自未知的amount變量。

+0

當金額包含小數時似乎會發生。如果我在190年通過,那很好。但是如果我通過104.93,那麼當它開始每點擊2美分時加入。 – Kevin 2011-04-04 14:32:33

+0

請給我們一個生動的例子,讓我們重新解決問題。我似乎無法重現它:http://jsfiddle.net/nGrVf/。 – tcooc 2011-04-04 14:44:45

+0

這裏是一個使用實數:http://jsfiddle.net/nGrVf/6/。它似乎在小提琴上工作,但不是在我的開發環境中。 – Kevin 2011-04-04 15:12:13

1

你困在你的類型中嗎?

我發現將貨幣值存儲在最低單位(例如美分或便士)的整數中總是更好,然後在顯示時從右側兩位加小數點。

所以轉換可能看起來像:

var dollars = 100.43; 
var cents = Math.round(dollars * 100); 

//convert for display 
var sCents = String(cents); 
var display = sCents.substr(0, sCents.length-2) + "." + sCents.substr(sCents.length-2,2); 
alert(display); 

在這裏可以看到在http://jsfiddle.net/jameswiseman76/jhjtP/

那麼你不必擔心任何醜陋的浮點轉換。

+0

'a'在哪裏?它的未定義。 – Kevin 2011-04-04 14:34:43

+0

對不起,這是從以前的版本的宿醉。我改名爲值更有意義(並抵制使用「磅」和「便士」的誘惑:-)) - 現在已解決 – 2011-04-04 14:49:50

+0

對不起,對於遲到的回覆,但是這增加了兩個'。'。進入我的最終結果。有任何想法嗎? – Kevin 2011-04-29 21:00:04