2014-05-05 75 views
0

好吧,我正在构建一个自定义联机开票应用程序,并且在创建发票页面上,我已将其设置为默认显示一行项目。但通过点击“新建行”按钮,它可以将更多行添加到表中以获取更多项目。如果你改变主意,你也可以删除行。使用javascript进行动态计算

现在,所有上述工作都很好。我决定更进一步,并自动计算每行(总行)以及整个表格(总计)的总计。这是我遇到问题的地方。

​​

我有行共有以下的javascript:

function Calculate() { 
    var par = $(this).parent().parent(); 
    var price = $(par).find('input#price').val(); 
    var qty = $(this).val(); 
    var total = price*qty; 
    $(par).find('input#total').val(total); 
    CalculateTotal(total); 
} 

如果price$12.95qty2上面的脚本返回25.9我想它返回$25.90代替。

Grand Total:(从自动上述函数调用)

function CalculateTotal(rowTotal) { 
    y = $("#Gtotal").text(); 
    z = rowTotal; 
    x = +y + +z; 
    $("#Gtotal").text(x); 
} 

基于上述功能上面的例子将返回25.9为好。我也想要这个返回25.90另外,如果我将表格中的数量更改为0,则总计不会更改。但是,如果我将数量更改为2,那么它将返回38.849999999999994在我使用表进行测试时发现了更多问题。我不会在这里列出。

很明显,你可以看到,我需要一个更好的方式来处理javascript中的计算。我不是很有经验的JavaScript,所以任何帮助都会非常好。我真的需要dynamic calculations in javascript

由于我的代码不会在这里以不错的格式复制。我创建了一个jsFiddle,以允许您查看我的FULL代码以及我的javascript。 CLICK HERE TO SEE FIDDLE

+0

你可以使用'.toFixed()' – falcon

+0

你忘了添加jquery到你的小提琴 – user1978142

+0

Whoops ...检查有问题的更新链接。 – user3602774

回答

0

您可以使用parseFloat将输入值转换为浮点。并且parseInt用于整数转换。请务必阅读文档如何工作(特别是parseInt,不要忘记指定基数的第二个参数)。

请参阅http://jsfiddle.net/vCs6E/6/工作小提琴。

既然这么要求的工作代码,这里是在计算更新的行()

var total = parseFloat(price) * parseFloat(qty);

+0

在你的小提琴中,总计似乎没有正确更新。输入数字1,然后输入2。它不匹配。 – user3602774

+0

事实上,这是因为CalculateTotal()实现有问题。您每次增加总计总数,而不是累计个别订单项总计... – DevDude

+0

我不是很擅长JavaScript,你能帮助我吗...什么是更好的方法? – user3602774

0

使用核对答案,这一起:

var someNumber = 99.999923423; 

// shows 99.99 
console.log(someNumber.toFixed(2)); 

会有所帮助。