web-dev-qa-db-ja.com

PHPで剰余なしで数値を分割するにはどうすればよいですか?

PHPでどのように数値を分割し、残りを除外しますか?

43
eomeroff

結果の値をintにキャストするだけです。

_$n = (int) ($i / $m);
_

興味深い関数(達成したいものに応じて、負の整数が分割されると予想される場合)は、 floor()ceil() です。および round()

83
KingCrunch

PHP 7には、intdivという名前の新しい組み込み関数があります。

例:

$result = intdiv(13, 2);

この例の$resultの値は6になります。

この関数の完全なドキュメントは PHPドキュメント にあります。

9
Remco Beugels

最も実用的な目的のために、受け入れられた答えは正しいです。

ただし、整数の幅が64ビットのビルドでは、可能な整数値のすべてが倍精度浮動小数点数として表現できるわけではありません。詳細については、受け入れられた回答に関する私のコメントを参照してください。

のバリエーション

$n = ($i - $i % $m) / $m;

(別の回答の下にあるKingCrunchのコメントから取られたコード)は、望ましい丸め動作に応じてこの問題を回避します(モジュラス演算子の結果が負になる可能性があることに注意してください)。

6
ralokt

$result = intval($a / $b)のような上記の決定に加えて、1つの特定のケースがあります。

2の累乗($b2 ^ N)ビット単位の右シフト演算を使用できます。

$result = $a >> $N;

ここで、$ Nは32ビットオペレーティングシステムでは1〜32、64ビットシステムでは64です。

$ bの場合、2のべき乗であると判断されるのが最も速いため、便利な場合があります。

そして、後方への(オーバーフローのため注意してください!) 2のべき乗で乗算する操作があります:

$result = $a << $N;

これが誰かにも役立つことを願っています。

0
FlameStorm