Я ищу эффективный и элегантный способ генерации переменной JavaScript длиной 9 цифр:
Пример: 323760488
Я ищу эффективный и элегантный способ генерации переменной JavaScript длиной 9 цифр:
Пример: 323760488
Вы можете сгенерировать 9 случайных цифр и объединить их все вместе.
Или вы можете вызвать random()
и умножить результат на 1000000000:
Math.floor(Math.random() * 1000000000);
Так как Math.random()
генерирует случайное число двойной точности от 0 до 1, у вас будет достаточно цифр точности, чтобы все еще иметь случайность в вашем наименее значимом месте.
Если вы хотите, чтобы ваш номер начинался с ненулевой цифры, попробуйте:
Math.floor(100000000 + Math.random() * 900000000);
Или блокнот с нулями:
function LeftPadWithZeros(number, length)
{
var str = '' + number;
while (str.length < length) {
str = '0' + str;
}
return str;
}
Или площадку, используя этот встроенный трюк.
Почему бы не просто извлечь цифры из строкового представления Math.random()
?
Math.random().toString().slice(2,11);
/*
Math.random() -> 0.12345678901234
.toString() -> "0.12345678901234"
.slice(2,11) -> "123456789"
*/
(требование состоит в том, что каждая точность javascript-реализации Math.random()
не менее 9 знаков после запятой)
Также...
function getRandom(length) {
return Math.floor(Math.pow(10, length-1) + Math.random() * 9 * Math.pow(10, length-1));
}
getRandom (9) = > 234664534
Три метода, которые я нашел в порядке эффективности: (Тестовая машина работает с Firefox 7.0 Win XP)
parseInt(Math.random()*1000000000, 10)
1 миллион итераций: ~ 626 мс. Безусловно, самый быстрый - parseInt является нативной функцией и снова вызывает библиотеку Math. ПРИМЕЧАНИЕ. См. Ниже.
Math.floor(Math.random()*1000000000)
1 миллион итераций: ~ 1005 мс. Два вызова функций.
String(Math.random()).substring(2,11)
1 миллион итераций: ~ 2997мс. Три вызова функций.
А также...
parseInt(Math.random()*1000000000)
1 миллион итераций: ~ 362мс. ПРИМЕЧАНИЕ. Параметр parseInt обычно считается небезопасным для использования без параметра radix. См. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt или google "JavaScript: Хорошие детали". Однако, кажется, что параметр, переданный parseInt, никогда не будет начинаться с '0' или '0x', так как вход сначала умножается на 1000000000. YMMV.
В одной строке (ish):
var len = 10;
parseInt((Math.random() * 9 + 1) * Math.pow(10,len-1), 10);
Шаги:
1 ≤ x < 10
.Math.pow(10,len-1)
(число с длиной len
).parseInt()
для удаления десятичных знаков.Экран очистит эту страницу:
Подумал, я бы взял удар по твоему вопросу. Когда я запустил следующий код, он работал у меня.
<script type="text/javascript">
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
} //The maximum is exclusive and the minimum is inclusive
$(document).ready(function() {
$("#random-button").on("click", function() {
var randomNumber = getRandomInt(100000000, 999999999);
$("#random-number").html(randomNumber);
});
</script>
Math.random().toFixed(length).split('.')[1]
Использование toFixed позволяет вам установить длину больше, чем по умолчанию (кажется, генерирует 15-16 цифр после десятичной дроби. ToFixed позволит вам получить больше цифр, если они вам нужны.
function rand(len){var x='';
for(var i=0;i<len;i++){x+=Math.floor(Math.random() * 10);}
return x;
}
rand(9);
Math.floor(Math.random() * 899999999 + 100000000);
Если вы хотите создать случайный номер телефона, то обычно им запрещается начинать с нуля. Вот почему вы должны комбинировать несколько методов:
Math.floor(Math.random()*8+1)+Math.random().toString().slice(2,10);
это приведет к генерации случайных значений между 100 000 000 и 999 999 999
С другими методами у меня была небольшая проблема, чтобы получить надежные результаты, поскольку ведущие нули были как-то проблемой.
Я знаю, что ответ старый, но я хочу поделиться этим способом, чтобы генерировать целые числа или числа с плавающей запятой от 0 до n. Обратите внимание, что положение точки (случай с плавающей точкой) является случайным между границами. Номер является строкой, потому что ограничение MAX_SAFE_INTEGER, которое сейчас составляет 9007199254740991
Math.hRandom = function(positions, float = false) {
var number = "";
var point = -1;
if (float) point = Math.floor(Math.random() * positions) + 1;
for (let i = 0; i < positions; i++) {
if (i == point) number += ".";
number += Math.floor(Math.random() * 10);
}
return number;
}
//integer random number 9 numbers
console.log(Math.hRandom(9));
//float random number from 0 to 9e1000 with 1000 numbers.
console.log(Math.hRandom(1000, true));
function randomCod(){
let code = "";
let chars = 'abcdefghijlmnopqrstuvxwz';
let numbers = '0123456789';
let specialCaracter = '/{}$%&@*/()!-=?<>';
for(let i = 4; i > 1; i--){
let random = Math.floor(Math.random() * 99999).toString();
code += specialCaracter[random.substring(i, i-1)] + ((parseInt(random.substring(i, i-1)) % 2 == 0) ? (chars[random.substring(i, i-1)].toUpperCase()) : (chars[random.substring(i, i+1)])) + (numbers[random.substring(i, i-1)]);
}
code = (code.indexOf("undefined") > -1 || code.indexOf("NaN") > -1) ? randomCod() : code;
return code;
}
У этого уже есть достаточно ответов?
Я думаю, нет. Таким образом, это должно надежно предоставить число из 9 цифр, даже если Math.random()
решит вернуть что-то вроде 0.000235436
:
Math.floor((Math.random() + Math.floor(Math.random()*9)+1) * Math.pow(10, 8))