一个JavaScript的Math.random()问题

2024年11月22日 18:36
有1个网友回答
网友(1):

这是因为JavaScript产生的随机数是个纯小数(大于等于0小于1的实数),但小数点后面的小数位数肯定不是固定16位的啊,比如 0.123 是3位小数,0.987654321 是9位小数。所以仅靠获取小数点后的数字就得到16位数的想法是不靠谱的。

正确的做法:第一种是把随机数乘以9再加1,就得到1到9.9999……的数字,再芦世乘以10的15次方(也就是1后伏腊面15个0),最后取整,就得到1000……(1后面15个0,即最小的16位数)到9999……(16个9,即最大的16位数)之间的数字了:

function random(){
    return parseInt((Math.random()*9+1)*Math.pow(10,15));
}

第二种是把16个1位数的随机整数拼在一起也就是16位数了:

function random(){
    for(var s="",i=0;i<16;i++)s+=parseInt(Math.random()*10);
    return s;
}

两种方法的区别在于,第一种产生的数字是纯的16位数(0不能作为开头),类型是数值,效率应该是较高的;第二种产生的数字则允许0开头,类型是字符串,效率相对差缺哗滑一些。