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;

これはほとんど丸めを処理します.私が欠けているのは、constants.MAP_CELL_SIZE.

うまくいけば、これは理にかなっており、誰かが手を貸してくれます...とても感謝しています!


アップデート

Math.roundからに切り替えるのと同じくらい簡単でしたMath.floor

4

2 に答える 2

10

切り捨てるには、Math.round() の代わりに Math.floor() を使用します。次のように使用できます。

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 に答える