我在网站上有一个页面,用于计算租借的总费用,这是可选的。如果您选择或取消选中复选框选项,则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 :(得分: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
变量。