web-dev-qa-db-ja.com

PHPでlong intを使用する

私はこれを試していますが、大きな価値を保存することができません

$var = Rand(100000000000000,999999999999999);
echo $var; // prints a 9 digit value(largest possible)

必要な値を取得するにはどうすればよいですか?

14
Prashant Singh

PHPのintは通常32ビットです。他のパッケージは、より精度の高いintを提供します: http://php.net/manual/en/language.types.integer.php

2
Ned Batchelder

manual から:

整数のサイズはプラットフォームに依存しますが、最大値は約20億が通常の値です(32ビットの符号付き)。通常、64ビットプラットフォームの最大値は約9E18です。 PHPは、符号なし整数をサポートしていません。整数サイズは定数PHP_INT_SIZEを使用して決定でき、最大値は定数PHP_INT_MAXを使用してPHP 4.4.0およびPHP 5.0.5以降で決定できます。

...

PHPが整数型の範囲を超える数を検出した場合、代わりに浮動小数点数として解釈されます。また、整数型の境界を超える数になる結果の演算は、代わりに浮動小数点数を返します。

BC Math[〜#〜] gmp [〜#〜] は、この制限を操作する(唯一の?)方法です。

18
DaveRandom

非常に大きな数を処理する必要がある場合は、BC Mathで成功しています。ここにあなたが知る必要があるすべてへのリンクがあります:

http://php.net/manual/en/book.bc.php

4
Tim Wickstrom

数値を生成してネイティブタイプとして操作する場合は、ほとんどのPHPインストール済み環境ではできません(32ビットまたは64ビットのintsがあり、他には何もありません)。他の答えはすでに述べたとおりですが、数値を生成するだけでそれを渡したい場合、可能なトリックは文字列を連結することです:

_$var = Rand(0,PHP_INT_MAX).str_pad(Rand(0, 999999999), 9, 0, STR_PAD_LEFT);
echo $var;
_

PHPが32ビット整数を使用するプラットフォームでは、これにより、32ビットより大きい(小数点以下10桁を超える)ランダムに近い整数(文字列として)を取得できます)。もちろん、この構造にはバイアスがあります。つまり、すべての数値を同じ確率でカバーすることはできません。Rand()呼び出しの制限は通常の10進数の規則に従うため、数値の上限を調整するのは簡単ですあなたが欲しい。

この値を保存/送信/表示するだけの場合、文字列は問題ありません。テストの平等とより大きい/より小さいも機能します。それを使って計算をしないでください。

1
jeteon