随机数:将JavaScript转换为PHP

时间:2012-06-13 20:06:39

标签: php javascript

我在javascript中有以下代码行:

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

生成如下数字:

350303159372528000

我在PHP中尝试了同样的事情:

rand()*1000000000000000000

返回:

2.272e+21

我需要使用PHP,因为生成的数字将存储为SESSION变量,稍后将由JavaScript使用。

如何让PHP强制数字为int而不是浮点数?


编辑PHP似乎很难解决这个问题。

如果我刚刚在PHP中生成兰特数并将其保存到SESSION然后在JavaScript中乘以1000000000000000000,它会起作用吗?

我该怎么做?

5 个答案:

答案 0 :(得分:3)

我建议打电话

PHP_INT_MAX

查看您的PHP安装是否可以处理大的整数。我猜它不可能是为什么它会把它归结为科学记谱法。

答案 1 :(得分:3)

我建议将converting结果改为int:

intval(rand()*1000000000000000000)

那就是说,请参阅Kolink和Jeremy1026关于精度问题的答案。如果您只需要一个唯一标识符,请参阅真相的答案。

更新:如果您使用字符串代表您的号码,不希望或不能使用arbitrary precision library,并且不严格需要完全公平的随机数,你可以生成较小的数字并将它们连接在一起:

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

+1是为了避免结果中的前导零;请注意您的号码永远不会有一个数字,但是其他所有数字都是可能的)

对于具有(确切)18位数的随机数,您还可以在第二部分使用str_pad,用前导零填充它:

strval(rand(100000000,999999999)) .
    str_pad(strval(rand(0,999999999)), 9, "0", STR_PAD_LEFT)

答案 2 :(得分:2)

如果您需要一个唯一标识符(这就是您尝试做的事情),请使用PHP的uniqid()函数。

答案 3 :(得分:2)

floor()/ ceil()/ round()/(int)/ intval()会将数字转换为int。 另外,rand()有两个参数。如果提供了int,它将返回一个整数

printf()应该以你想要的格式进行打印(printf('%d',$ int)应该这样做)

答案 4 :(得分: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

?>