舍入两位小数 - 没有找到正确的公式

时间:2013-11-25 19:30:59

标签: javascript decimal rounding

我似乎找不到在我的代码中有两个小数位的正确公式。现在,当我点击关于计算的第一个选项时,它会四舍五入到小数点后三位(不是3个小数位意味着什么。但不管结果如何,它应该舍入到2个小数位)。这是我的最后一次尝试:

$('#a_is_valid').one('click', function(){
    if ($('#code_promo').val() == 'promocode')
        {$('#gtotal').val($('#gtotal').val()-($('#gtotal').val()-        
            (($('#gtotal').val()*.75)))).fixed(2);

    }
})

1 个答案:

答案 0 :(得分:2)

给定一个数字(或代表数字的字符串),为什么不这样做:

var number;
var output = (Math.round(number * 100) / 100).toFixed(2);

在你的情况下,看起来你想要:

$('#a_is_valid').one('click', function(){
     if ($('#code_promo').val() == 'promocode')
        {$('#gtotal').val((Math.round($('#gtotal').val() * 75) / 100).toFixed(2));

Math.round(足够适当)舍入到最接近的整数,所以你必须做一些魔术。乘以10 ^(你想要的小数位数) - 在你的情况下,10 ^ 2或100,舍入,然后除以相同的数字。

在我专门为您制作的示例中,您会注意到我乘以75:0.75 * 100.

使用函数可能最容易看到它:

function roundToNPlaces(n, val) {
    var multiplier = Math.pow(10, n);
    return (Math.round(val * multiplier) / multiplier).toFixed(n);
}

然后您可以按如下方式设置gtotal:

$('#gtotal').val(roundToNPlaces(2, $('gtotal').val() * 0.75));

请参阅此FIDDLE

请参阅:

  • Math.round 注意:本文档提供了与我给出的代码类似(但比其更复杂)的实现。如果您将整个Decimal rounding示例复制到您的代码中(在您第一次使用它之前),则可以使用Math.round10($('#gtotal').val() * .75, -2);。请参阅http://jsfiddle.net/aW44n/1/
  • toFixed