1

javascriptに次のコード行があります。

(Math.random() + "") * 1000000000000000000

これは次のような数値を生成します:

350303159372528000

私はこれを使ってPHPで同じことを試しました:

rand()*1000000000000000000

どちらが返されますか:

2.272e+21

生成された数値はSESSION変数として保存され、後でJavaScriptで使用されるため、PHPを使用する必要があります。

PHPで数値をfloatではなくintに強制するにはどうすればよいですか?


EDITPHPはこれに苦労しているようです。

PHPでrand番号を生成し、それをSESSIONに保存してから、JavaScriptで1000000000000000000を掛けた場合、機能しますか?

どうすればいいですか?

4

5 に答える 5

3

電話することをお勧めします

PHP_INT_MAX

PHPインストールでそれほど大きなインターガーを処理できるかどうかを確認します。私はそれができないと推測しています。それが科学的記数法にそれをノックダウンしている理由です。

于 2012-06-13T20:10:44.510 に答える
3

結果をintに変換することをお勧めします:

intval(rand()*1000000000000000000)

とはいえ、精度の問題については、Kolink と Jeremy1026 の回答を参照してください。一意の識別子のみが必要な場合は、Truth's answer を参照してください。

更新:数値を表すために文字列を使用していて、任意精度ライブラリを使用したくない、または使用できず、完全に公正な乱数を厳密に必要としない場合は、より小さな数値を生成してそれらを連結することができます:

strval(rand()*999999999 + 1) . strval(rand()*1000000000)

(これ+1は、結果の先頭に 0 が含まれないようにするためです。また、数値が 1 桁になることはありませんが、他のすべての数値が可能であることに注意してください)

(正確に) 18 桁の乱数の場合str_pad、2 番目の部分で使用して先行ゼロを埋めることもできます。

strval(rand(100000000,999999999)) .
    str_pad(strval(rand(0,999999999)), 9, "0", STR_PAD_LEFT)
于 2012-06-13T20:11:56.777 に答える
2

一意の識別子が必要な場合(これはあなたがやろうとしているように見えます)、PHPのuniqid()関数を使用してください。

于 2012-06-13T20:11:12.237 に答える
2

floor() / ceil() / round() / (int) / intval() は数値を int に変換します。また、rand() は 2 つの引数を取ります。int が指定されている場合 - 整数を返します

そして、printf() は、希望する形式で印刷する必要があります (printf('%d', $int) がトリックを実行する必要があります)。

于 2012-06-13T20:44:06.593 に答える
1

最後に、次のように問題を解決しました。

<?php
error_reporting(0);
 function RandNumber($e){


 for($i=0;$i<$e;$i++){
 $rand =  $rand .  rand(0, 9);  
 }
 return $rand;

 }

 echo RandNumber(18);
// Outputs a 18 digit random number

?>
于 2012-06-13T21:53:14.073 に答える