如何在Javascript中始终向下舍入到最接近的X?

时间:2013-03-31 11:26:11

标签: javascript

我在画布上绘制了一个网格,当用户点击网格时,我正在绘制一个矩形。我想总是在用户点击的网格单元格顶部绘制矩形。所以我需要向下舍入到最近的X,在我的情况下,是40的倍数。

一些例子......

121 => 120
125 => 120
139 => 120
159 => 120
160 => 160

到目前为止,我使用以下内容进行舍入...

x = Math.round(x / constants.MAP_CELL_SIZE) * constants.MAP_CELL_SIZE;

这个几乎处理舍入,我唯一缺少的是向下舍入到最接近的40的倍数,它保存在constants.MAP_CELL_SIZE

希望这是有道理的,有人可以伸出援助之手......非常感谢!


更新

就像从Math.round切换到Math.floor一样简单。

2 个答案:

答案 0 :(得分:8)

要向下舍入,请使用Math.floor()而不是Math.round()。您可以像这样使用它:

var customFloor = function(value, roundTo) {
    return Math.floor(value / roundTo) * roundTo;
}

customFloor(121, constants.MAP_CELL_SIZE); // => 120
customFloor(159, constants.MAP_CELL_SIZE); // => 120
customFloor(160, constants.MAP_CELL_SIZE); // => 160

请参阅MDN上的Math.floor()文档。

答案 1 :(得分:1)

如果要截断数字的小数部分,可以使用位运算符,将数字视为32位整数。

x = x | 0;

请注意,这与Math.round()的行为不同,后者会以负数正确舍入。