2

我在画布上绘制了一个网格,当用户单击网格时,我正在绘制一个矩形。我想始终在用户单击的网格单元顶部绘制矩形。所以我需要四舍五入到最接近的 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

4

2 回答 2

10

要向下舍入,请使用 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()文档。

于 2013-03-31T11:39:46.783 回答
1

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

x = x | 0;

请记住,这与 具有不同的行为Math.round(),后者将使用负数正确舍入。

于 2013-03-31T11:29:48.560 回答