javascript数学,以.05为增量四舍五入到小数点后两位

javascript math, rounding to two decimal places in .05 increments

本文关键字:小数点 两位 四舍五入 数学 javascript      更新时间:2023-09-26

我提前道歉。我已经阅读了很多文章,我相信答案在于实现toFixed()方法,但不知道如何实现。

$('.addsurcharge').click(function() {               
    $('span.depositamount').text(function(i,v) {
        return Math.round(parseInt(v * 100, 10) * 0.025) / 100 + (v * 1);
    });      
});
$('.nosurcharge').click(function() {            
    $('span.depositamount').text(function(i,v) {
        return Math.round(parseInt(v * 100, 10) * -0.025) / 100 + (v * 1);
    });      
});

基本上,上面是对AMEX存款加(或减(2.5%的附加费,我希望它四舍五入到最接近的小数点后两位。最好以0.05为增量。

感谢帮助!

货币最简单的方法是使用次要单位,然后四舍五入,最后才转换为主要单位。因此,对于一个有美元和美分的系统,以美分为单位工作到最后,然后转换为美元。如果要输入的文本的格式为"2.03",则可以使用以下方法将其四舍五入到最接近的0.05美元:

function roundToFiveCents(v) {
  // Turn dollars into cents and convert to number
  var len;
  v = v * 100;
  // Get residual cents
  var r = v % 5;
  // Round to 5c
  if (r) {
    v -= (r == 1 || r == 2)? r : r-5;
  }
  // Convert to string
  v = v + '';
  len = v.length - 2;
  // Return formatted string
  return v.substring(0, len) + '.' + v.substring(len);
}

这可以更简洁,但我看不出重点,它只会让服务器混淆。字符串操作非常快速,用简单的加法和减法代替了javascript乘法和小数除法的不确定性。

例如,借用rfausak的答案:

// Returns string, remove ' + ''' to return number
function roundToFiveCents(v) {
  return (Math.round(v*20)/20).toFixed(2) + '';
}

如果你的问题是"我如何接受v,一个包含美元和美分金额的变量,并应用2.5%的AMEX附加费,结果四舍五入到最接近的美分(即两位小数(?"那么你可以试试这个:

return (v * 1.025).toFixed(2);

如果你有可变附加费,试试这个:

var surcharge = 0.025; // or whatever percentage applies
return (v * (1 + surchage)).toFixed(2);

请注意,toFixed返回一个字符串表示,但它会为您进行舍入。

(关于你的"nosurcharge"函数,你不能通过乘以-0.025来去除之前施加的0.025的附加费。你可以通过乘以1.025来应用加法,所以你可以通过除以1.025来去除它。(

尽管这篇文章有点旧,但问题不是。我想海报的意思是,有些货币是以美分计算的,但价格是以x.00或x.05美分计算的。例如瑞士货币。

该解决方案借鉴了RobG的答案,并进行了一些修复:

function roundToFiveCents(v) {
    var len;
    // Format to 2 numbers after decimal point an turn dollars into cents
    v = v.toFixed(2) * 100;
    // Get residual cents
    var r = v % 5;
    // Round to 5c
    if (r) {
        v -= (r === 1 || r === 2) ? r : r - 5;
    }
    // Convert to string
    v = v + '';
    len = v.length - 2;
    // Return formatted string
    return v.substring(0, len) + '.' + v.substring(len);
}

下面的javascript:怎么样

function my_round(x) {
    x *= 20;
    x = Math.ceil(x);
    return x / 20;
}
var amount = 3.37;
alert(my_round(amount));
var n = 8.22354;
roundx(n, 3)
function roundx(num, decPlace) {
  return Math.round(num * Math.pow(10, decPlace))/Math.pow(10, decPlace);
}

这个简单的函数适用于舍入到x个位数。