舍入到最近的.25 javascript

时间:2009-10-12 09:59:57

标签: javascript rounding

我想将所有数字转换为最接近的.25

因此...

5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50

由于

8 个答案:

答案 0 :(得分:86)

这是rslite所说的实现:

var number = 5.12345;
number = (Math.round(number * 4) / 4).toFixed(2);

答案 1 :(得分:63)

乘以4,舍入为整数,除以4,格式为两位小数。

编辑有什么原因可以进行投票?至少留下评论,知道应该改进什么。

答案 2 :(得分:12)

如果您关心速度,请注意使用以下方法可以提高30%的速度:

var nearest = 4;
var rounded = number + nearest/2 - (number+nearest/2) % nearest;

从我的网站:http://phrogz.net/round-to-nearest-via-modulus-division
此处的效果测试:http://jsperf.com/round-to-nearest

答案 3 :(得分:9)

这是一个进行舍入的通用函数。在上面的例子中,使用了4,因为它与.25相反。此功能允许用户忽略该细节。它目前不支持预设精度,但可以轻松添加。

function roundToNearest(numToRound, numToRoundTo) {
    numToRoundTo = 1 / (numToRoundTo);

    return Math.round(numToRound * numToRoundTo) / numToRoundTo;
}

答案 4 :(得分:3)

这是@Gumbo的一个函数形式的答案:

var roundNearQtr = function(number) {
  return (Math.round(number * 4) / 4).toFixed(2);
};

您现在可以拨打电话:

roundNearQtr(5.12345); // 5.00
roundNearQtr(3.23); // 3.25
roundNearQtr(3.13); // 3.25
roundNearQtr(3.1247); // 3.00

答案 5 :(得分:0)

舍入的非常好的近似值:

function Rounding (number, precision){

  var newNumber;
  var sNumber = number.toString();

  var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;

  if (number < 0)
    newNumber = (number -  5 * Math.pow(10,-increase));
  else
  newNumber = (number +  5 * Math.pow(10,-increase));

  var multiple = Math.pow(10,precision);
  return Math.round(newNumber * multiple)/multiple;
}

答案 6 :(得分:0)

使用以下功能,希望有所帮助

function roundByQuarter(value) {
    var inv = 1.0 / 0.25;
    return Math.round(value * inv) / inv;
}

调用该函数如下,将得到最接近的Quarter值,即它不会返回.32,.89,.56但仅返回.25,.75,.50小数。

roundByQuarter(2.74) = 2.75

roundByQuarter(2.34) = 2.25

roundByQuarter(2.94) = 3.00

roundByQuarter(2.24) = 2.25

答案 7 :(得分:0)

function roundToInc(num, inc) {
    const diff = num % inc;
    return diff>inc/2?(num-diff+inc):num-diff;
}

> roundToInc(233223.2342343, 0.01)
233223.23
> roundToInc(505, 5)
505
> roundToInc(507, 5)
505
> roundToInc(508, 5)
510