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

标签 javascript jquery math decimal rounding

我提前道歉。我通读了很多帖子,我确信答案在于实现 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) + '';
}

关于javascript 数学,以 .05 为增量四舍五入到小数点后两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7510107/

相关文章:

python - 数学算法失败但似乎正确

math - 如何在 Matlab 中生成信号的低频版本?

javascript - react : Parent component refs not accessible to newly mounted child component?

javascript - 通过 jquery 循环更新子范围内容

javascript - 如果选择 `all years` 选项,则共享相同的 php 函数

javascript - 管理自定义 js 库的版本控制

javascript - jQuery 动画圈

c++ - vector 应用如何使多边形倾斜?

javascript - Node.js client.emit 仅在第一次尝试后才工作?

javascript - 无法在 redux 操作中重命名响应