2011-04-04 168 views
4

我在网站上有一个页面,用于计算出租的费率总计,这是可选的。如果您选择或取消选择复选框选项,则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/

+0

toFixed不是一个JavaScript本地函数。你可以请你发布该方法的代码。 – 2011-04-04 13:34:06

+3

你有没有尝试先固定然后parseFloat? @Evan toFixed是一个JavaScript原生函数https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/toFixed – kjy112 2011-04-04 13:35:15

+2

如果你可以设置一个[jsFiddle](http://jsfiddle.net/)场景它会帮助我们帮助。 – ExtraGravy 2011-04-04 13:39:13

回答

0

我能想起来的最简单的解决办法是圆下来(使用MULS和floor):即

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

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

+0

当金额包含小数时似乎会发生。如果我在190年通过,那很好。但是如果我通过104.93,那么当它开始每点击2美分时加入。 – Kevin 2011-04-04 14:32:33

+0

请给我们一个生动的例子,让我们重新解决问题。我似乎无法重现它:http://jsfiddle.net/nGrVf/。 – tcooc 2011-04-04 14:44:45

+0

这里是一个使用实数:http://jsfiddle.net/nGrVf/6/。它似乎在小提琴上工作,但不是在我的开发环境中。 – Kevin 2011-04-04 15:12:13

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/

那么你不必担心任何丑陋的浮点转换。

+0

'a'在哪里?它的未定义。 – Kevin 2011-04-04 14:34:43

+0

对不起,这是从以前的版本的宿醉。我改名为值更有意义(并抵制使用“磅”和“便士”的诱惑:-)) - 现在已解决 – 2011-04-04 14:49:50

+0

对不起,对于迟到的回复,但是这增加了两个'。'。进入我的最终结果。有任何想法吗? – Kevin 2011-04-29 21:00:04