Javascript舍入数字最接近0.5

时间:2011-05-26 11:49:46

标签: javascript


有人可以告诉我如何将数字四舍五入到最接近的0.5 我必须根据屏幕分辨率在网页中缩放元素,因此我只能将字体大小以pts指定为1,1.5或2及以后等。

如果我将其四舍五入到小数点后1位或没有。 我怎样才能完成这份工作?

8 个答案:

答案 0 :(得分:144)

编写自己的函数,乘以2,舍入,然后除以2,例如

function roundHalf(num) {
    return Math.round(num*2)/2;
}

答案 1 :(得分:55)

这是一个可能对您有用的更通用的解决方案:

function round(value, step) {
    step || (step = 1.0);
    var inv = 1.0 / step;
    return Math.round(value * inv) / inv;
}

round(2.74, 0.1) = 2.7

round(2.74, 0.25) = 2.75

round(2.74, 0.5) = 2.5

round(2.74, 1.0) = 3.0

答案 2 :(得分:2)

Math.round(-0.5)返回 0 ,但根据数学规则,它应为 -1

更多信息:Math.round()Number.prototype.toFixed()

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

答案 3 :(得分:2)

以上所有答案的精简版:

Math.round(valueToRound / 0.5) * 0.5;

通用:

Math.round(valueToRound / step) * step;

答案 4 :(得分:1)

    function roundToTheHalfDollar(inputValue){
      var percentile = Math.round((Math.round(inputValue*Math.pow(10,2))/Math.pow(10,2)-parseFloat(Math.trunc(inputValue)))*100)
      var outputValue = (0.5 * (percentile >= 25 ? 1 : 0)) + (0.5 * (percentile >= 75 ? 1 : 0))
      return Math.trunc(inputValue) + outputValue
    }

我写这篇文章是在看到Tunaki更好的响应之前;)

答案 5 :(得分:0)

var f = 2.6;
var v = Math.floor(f) + ( Math.round( (f - Math.floor(f)) ) ? 0.5 : 0.0 );

答案 6 :(得分:0)

使用newtron扩展最佳答案,以便将余数舍入到0.5以上

function roundByNum(num, rounder) {
    var multiplier = 1/(rounder||0.5);
    return Math.round(num*multiplier)/multiplier;
}

console.log(roundByNum(74.67)); //expected output 74.5
console.log(roundByNum(74.67, 0.25)); //expected output 74.75
console.log(roundByNum(74.67, 4)); //expected output 76

答案 7 :(得分:0)

作为上述好的答案的更灵活的变体。

function roundNumber(value, step = 1.0, type = 'round') {
  step || (step = 1.0);
  const inv = 1.0 / step;
  const mathFunc = 'ceil' === type ? Math.ceil : ('floor' === type ? Math.floor : Math.round);

  return mathFunc(value * inv) / inv;
}