我在javascript中有以下代码行:
(Math.random() + "") * 1000000000000000000
生成如下数字:
350303159372528000
我在PHP中尝试了同样的事情:
rand()*1000000000000000000
返回:
2.272e+21
我需要使用PHP,因为生成的数字将存储为SESSION变量,稍后将由JavaScript使用。
如何让PHP强制数字为int而不是浮点数?
编辑PHP似乎很难解决这个问题。
如果我刚刚在PHP中生成兰特数并将其保存到SESSION然后在JavaScript中乘以1000000000000000000,它会起作用吗?
我该怎么做?
答案 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
?>