Javascript - 计算货币总额

时间:2011-04-04 13:27:31

标签: 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/

2 个答案:

答案 0 :(得分: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/

看到

然后您不必担心任何丑陋的浮点转换。

答案 1 :(得分:0)

我能想到的最简单的解决方案是将其四舍五入(使用muls和floor):即

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

编辑:经过一些测试,我发现给定的代码没有任何问题。这意味着计算错误来自代码的另一部分或来自未知的amount变量。