1

我在javascript中有以下代码行:

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

生成如下数字:

350303159372528000

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

rand()*1000000000000000000

返回:

2.272e+21

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

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


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

如果我只是在 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 的答案。

更新:如果您使用字符串来表示您的数字,不希望或不能使用任意精度库,并且不需要完全公平的随机数,您可以生成较小的数字并将它们连接在一起:

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)
于 2012-06-13T20:11:56.777 回答
2

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

于 2012-06-13T20:11:12.237 回答
2

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

并且 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 回答