2016-03-10 76 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的工作。 –