我正在寻找一种高效、优雅的方法来生成长度为9位数的JavaScript变量:
示例: 323760488
发布于 2010-08-09 11:38:33
为什么不直接从Math.random()
字符串表示中提取数字呢?
Math.random().toString().slice(2,11);
/*
Math.random() -> 0.12345678901234
.toString() -> "0.12345678901234"
.slice(2,11) -> "123456789"
*/
(要求每个javascript实现Math.random()
的精度至少是9位小数)
发布于 2012-12-05 01:04:44
还有..。
function getRandom(length) {
return Math.floor(Math.pow(10, length-1) + Math.random() * 9 * Math.pow(10, length-1));
}
getRandom(9) => 234664534
发布于 2011-10-28 23:09:29
我找到了三种方法,按效率排序:(测试运行Firefox 7.0 Win XP的机器)
parseInt(Math.random()*1000000000, 10)
100万次迭代:~626ms。到目前为止最快的- parseInt是一个本机函数,而不是再次调用数学库。注:见下文。
Math.floor(Math.random()*1000000000)
100万次迭代:~1005ms。两个函数调用。
String(Math.random()).substring(2,11)
100万次迭代:约2997ms。三个函数调用。
还有..。
parseInt(Math.random()*1000000000)
100万次迭代:约362ms。注意: parseInt通常被认为在没有基数参数的情况下使用是不安全的。请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt或谷歌的"JavaScript:好的部分“。但是,传递给parseInt的参数似乎永远不会以'0‘或'0x’开头,因为输入是先乘以1000000000。YMMV.
https://stackoverflow.com/questions/3437133
复制相似问题