29

我正在寻找的输出

4.658227848101266 = 4.5

4.052117263843648 = 4.0

我得到的最接近的是

rating = (Math.round(rating * 4) / 4).toFixed(1)

但是有了这个数字4.658227848101266 = 4.8???

4

6 回答 6

45
(Math.round(rating * 2) / 2).toFixed(1)
于 2013-10-15T20:47:01.807 回答
25

这很简单,您应该将该数字乘以 2,然后将其四舍五入,然后除以 2:

var roundHalf = function(n) {
    return (Math.round(n*2)/2).toFixed(1);
};
于 2013-10-15T20:46:41.243 回答
10

这对我有用!(使用最接近您的格式)

   rating = (Math.round(rating * 2) / 2).toFixed(1)
于 2013-10-15T20:46:50.307 回答
4

所以这个答案帮助了我。这里添加了一点魔法来处理舍入到 0.5 或整数。请注意,与其他所有答案相比,*2 和 /2 切换为 /.5 和 *.5。

/*
* @param {Number} n - pass in any number
* @param {Number} scale - either pass in .5 or 1
*/
var superCoolRound = function(n,scale) {
    return (Math.round(n / scale) * scale).toFixed(1);
};
于 2016-06-24T18:06:20.167 回答
0

这有点晚了。但是对于想要四舍五入到整数或 0.5 的人,你可以试试这个:

function roundDown(number) {
      var decimalPart = number % 1;
      if (decimalPart < 0.5)
         return number - decimalPart;
      else
         return number - decimalPart + 0.5;}
于 2021-03-30T05:53:56.490 回答
-3

我假设您想格式化输出数字而不是截断精度。在这种情况下,请使用 DecimalFormat。例如:

DecimalFormat df = new DecimalFormat("#.#");
df.format(rating);
于 2013-10-15T20:44:07.903 回答