2016-03-10 118 views
0

我目前正試圖計算我的服務費用(8%)的費用。賣方可以輸入他們想要收到的金額,或者想要買方支付(像蒸汽一樣在這裏:http://i.imgur.com/pLFN9px.png)。我目前使用此代碼:Javascript貨幣計算(不一致結果)

function precise_round(num, decimals) { 
var t=Math.pow(10, decimals); 
return (Math.round((num * t) + (decimals>0?1:0)*(Math.sign(num) * (10/Math.pow(100, decimals))))/t).toFixed(decimals); 
} 

    var elem = $(this); 
    elem.data('oldVal', elem.val()); 
    elem.bind("propertychange change click keyup input paste", function(event){ 
     if (elem.data('oldVal') != elem.val()) { 
     elem.data('oldVal', elem.val()); 
     if(elem.attr("id")=="seller-gets") { 
     var cur = elem.val(); 
     var value = cur*1.08; 
     $("#buyer-pays").val(precise_round(value), 2); 
     } else { 
     var cur = elem.val(); 
     var value = cur*0.92; 
     $("#seller-gets").val(precise_round(value), 2); 
     } 
    } 
    }); 
}); 

接收(左)< - >支付(右)的轉換並不一致。 (將左邊產生的相同數字放回右邊給出不同的左邊)。

對不起,如果這不夠清楚,如果需要,我可以更好地解釋它。

回答

0

在你做兩件不同的事情之前,這些不一致。爲例如說。讓我們把5作爲左邊的數字。 8% of 5 = .4,所以正確的數字將是5.4 而如果你把5.4作爲正確的數字8% of it is .432不是.4。所以左邊的數字將是5.4 - .432 = 4.968而不是5. 如果你想回來相同的數字,那麼你必須乘以1.08左 - >右轉換和除以1.08反之亦然。 希望這有助於。

+0

與Neli H的parseFloat函數一起工作很好。我希望我可以選擇2個答案! –

0

首先,你能確定傳遞給precise_round函數的值是你期望的嗎?

如果沒有,那麼我認爲從查看您的代碼,您需要將原始值轉換爲浮點數。我遇到了同樣的問題,一個分值錯了,轉換爲浮點數就修正了它。

var value = cur*1.08; 

應該是:

var value = parseFloat(cur)*1.08; 

var value = cur*0.92; 

應該是:

var value = parseFloat(cur)*0.92; 

之後,你可以使用value.toFixed(2),而不是四捨五入。無論如何要嘗試一些東西。

+0

我目前正在使用它,不知道它的幫助,但你的答案+ BlackMamba的工作。 –