【问题标题】:Javascript rounding to the desired number of decimal places issue [duplicate]Javascript四舍五入到所需的小数位数问题[重复]
【发布时间】:2016-10-27 08:02:36
【问题描述】:

我使用了一个四舍五入到所需小数位数的函数:

function modRound(value, precision)
{
    var precision_number = Math.pow(10, precision);
    return Math.round(value * precision_number) / precision_number;
}

它工作正常,但不是 0.565。 modRound(0.575, 2) 给出 0.58(正确),但 modRound(0.565, 2) 给出 0.56;我预计 0.57:

function modRound(value, precision) {
  var precision_number = Math.pow(10, precision);
  return Math.round(value * precision_number) / precision_number;
}
function test(num) {
  console.log(num, "=>", modRound(num, 2));
}
test(0.575);
test(0.565);

为什么会发生这种情况以及该怎么办?

【问题讨论】:

  • .565 * 100 导致56.49999999999999stackoverflow.com/questions/588004/…
  • @JEY 不,.5 将向上取整 Math.round(56.5) // -> 57
  • @vlaz 你是对的!我的错误
  • 其实modRound(0.575, 2)也有这种行为,因为0.575 * 100就是57.49999999999999
  • @vlaz:六年后,我也不是。:-)

标签: javascript rounding


【解决方案1】:

你可以像这样添加一个非常小的数字:

function modRound(value, precision)
{
    var precision_number = Math.pow(10, precision);
    return Math.round((value+0.00000000001) * precision_number) / precision_number;
}
alert(modRound(0.565, 2))

这里是JSFiddle

【讨论】:

  • 这太糟糕了。这会破坏其他测试用例,而不是解决根本问题。
猜你喜欢
  • 2014-05-09
  • 2013-03-23
  • 2018-01-29
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
相关资源
最近更新 更多