Javascript.RU

Math.random

Синтаксис

var randomNumber = Math.random();

Описание, примеры

Заметим, что числа в яваскрипт хранятся в формате с плавающей точкой IEEE 754 с округлением в сторону ближайшего четного. Поэтому иногда, в очень редких случаях, возможна генерация обычно исключенной верхней границы.

Пример: Cлучайное число от 0(включительно) до 1
function getRandom()
{
  return Math.random();
}
Пример: Случайное число между min и max
function getRandomArbitary(min, max)
{
  return Math.random() * (max - min) + min;
}
Пример: Случайное целое между min и max
// использование Math.round() даст неравномерное распределение!
function getRandomInt(min, max)
{
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

Автор: Александ (не зарегистрирован), дата: 18 ноября, 2009 - 17:46
#permalink

добавил в копилку))


Автор: Степан Y (не зарегистрирован), дата: 23 марта, 2017 - 00:05
#permalink

ВНИМАНИЕ ! Будь осторожен. Некоторые броузеры на Андроид не генерят случайное. С момента старта javascript функция random выдает строго ОДНУ И ТУ ЖЕ последовательность случайных чисел. При повторном запуске снова та же посл-сть


Автор: vital (не зарегистрирован), дата: 17 декабря, 2009 - 15:11
#permalink

А почему нельзя сделать так?

Math.floor(Math.random(min,max)*1000);

Или есть подвох?


Автор: Гость (не зарегистрирован), дата: 3 февраля, 2016 - 20:55
#permalink

Ну, так у тебя будет диапазон от 0 до 1000. А если ты возьмёшь пример из сайта, то сам указываешь диапазон.


Автор: vital (не зарегистрирован), дата: 17 декабря, 2009 - 15:20
#permalink

Ой блин! Я Math.random(); перепутал с пхпшным rand(); ))


Автор: Гость (не зарегистрирован), дата: 30 марта, 2010 - 16:44
#permalink

function getRandomArbitary(min, max)
{return Math.random() * (max - min) + min;}
А зачем "* (max - min)"?


Автор: B@rmaley.e><e, дата: 30 марта, 2010 - 22:29
#permalink

Math.random() возвращает дробное число от 0 до 1.
0 ≤ Math.random() < 1
Поэтому нужно получить случайное число от 0 до разницы между максимумом и минимумом (решается умножением этой разницы на случайное число) и добавить минимум.


Автор: Гость (не зарегистрирован), дата: 1 января, 2011 - 14:16
#permalink

Math.floor(Math.random() * (max - min + 1)) + min;
В результате будет число min, т.к. умножение на 0 идет


Автор: B@rmaley.e><e, дата: 1 января, 2011 - 22:02
#permalink

умножение на 0 идет

C чего бы это?


Автор: Гость (не зарегистрирован), дата: 8 января, 2011 - 15:53
#permalink

конечно всё однозначно помогло вот только подскажите как это рандомное значение присвоить переменной?


Автор: Гость (не зарегистрирован), дата: 15 января, 2011 - 15:22
#permalink

а вот кстате и еще 1 подвох смотрите т к функция присваивает дробное значение то после такой функции результаты частенько придется округлять


Автор: Гость (не зарегистрирован), дата: 5 марта, 2011 - 19:10
#permalink

Воистину


Автор: lymish, дата: 8 марта, 2011 - 10:38
#permalink

По моему, выражение по поиску случайного целого между min и max Math.floor(Math.random() * (max - min + 1)) + min; даст дробный результат, если min будет дробным.


Автор: lymish, дата: 8 марта, 2011 - 10:51
#permalink

И еще, не учитывается, что может быть 2 дробных числа, между которыми не существует целого, например 1,5 и 1,7.


Автор: Гость (не зарегистрирован), дата: 19 апреля, 2011 - 15:43
#permalink

Ну вы еще про то, что max может оказаться меньше чем min скажите


Автор: Гуля1 (не зарегистрирован), дата: 11 июня, 2011 - 23:48
#permalink
Пример: Случайное число между min и max
function getRandomArbitary(min, max)
	{
	  return Math.random() * (max - min) + min;
	}
Пример: Случайное целое между min и max
// использование Math.round() даст неравномерное распределение!
	function getRandomInt(min, max)
	{
	  return Math.floor(Math.random() * (max - min + 1)) + min;
	}

Зачем такие "Сложности"?Когда можно так:

Пример: Случайное число между 0 и max(от 0 и max,где max высший предел)
function getRandomArbitary (max)
	{
	  return Math.random() *  max;
	}
Или
function getRandomArbitary (max)
	{
	  return Math.random() *  (max +1);
	}
Пример: Случайное целое между min и max
// использование Math.round() даст неравномерное распределение!
	function getRandomInt(min, max)
	{
	  return Math.floor(Math.random() * max)+min;
	}
К примеру:случайное целое число от 6 до 11:
function getRandomInt
	{
	  return Math.floor(Math.random() * 6)+6;//11
	}

Автор: freeridik (не зарегистрирован), дата: 23 июня, 2011 - 16:27
#permalink

ты хоть сам проверь вначале свой код)


Автор: kuzroman, дата: 14 сентября, 2011 - 18:14
#permalink

как альтернатива:
Math.floor(Math.random()*196) + 5 // от 5 до 200


Автор: kuzroman, дата: 14 сентября, 2011 - 18:14
#permalink

// случайное число без повторов!
var randNum;
var randNumOld;
function getRandomInt(min, max)
{
randNum = Math.floor(Math.random() * (max - min + 1)) + min;
if(randNum==randNumOld) getRandomInt(1, kolFoto);
randNumOld = randNum;
return randNum;
}


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 15:01
#permalink

Молодец! Только после таких махинаций случайное число перестает быть СЛУЧАЙНЫМ.


Автор: Gannibal (не зарегистрирован), дата: 31 мая, 2015 - 21:08
#permalink

Слушай а можно ли так чтоб только 2 цифры повторялись например : 112345 или156139 и. Т.д


Автор: Гость (не зарегистрирован), дата: 17 января, 2012 - 22:21
#permalink

а нельзя

function random(max){math.floor(math.random() * max);}

Автор: Лев (не зарегистрирован), дата: 22 февраля, 2012 - 17:11
#permalink

Math.Random(0,56); - случайное число от 0 до 56.
А как задать чтобы ряд чисел был по порядку от 0 до 56 ?


Автор: Гость (не зарегистрирован), дата: 21 июня, 2017 - 12:46
#permalink

Через цикл вывести
примерно так :
procedure cir (min,max :integer) begin
var: i: integer
i:= min
while i<=max do
begin
write(i," ");
i:=i+1;
end;
cir(0,56);

P.S. Написал на языке pascal потому, что не помню как будет на js


Автор: Гость (не зарегистрирован), дата: 11 сентября, 2012 - 15:55
#permalink

у меня второй и третий пример выдают всегда одно и тоже число


Автор: Гость (не зарегистрирован), дата: 14 ноября, 2012 - 22:03
#permalink

// использование Math.round() даст неравномерное распределение!
function getRandomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1)) + min;
}

min = 0,
max = 1,
Math.random(), берем редкий случай, равно 1,

Тогда Math.floor(1 * (1 - 0 + 1)) + 0 даст результат равный 2, в то время, когда должны были получить 1.

Уж лучше тогда

return Math.round(Math.random() * (max - min) + min);

Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 15:11
#permalink

По крайней мере современные браузеры это не позволяют.


Автор: stevenp (не зарегистрирован), дата: 5 декабря, 2012 - 15:48
#permalink

Нет, вы забыли что Math.random() возвращает дробное число от 0 до 1.
0 ≤ Math.random() < 1


Автор: OP3, дата: 25 июня, 2013 - 16:52
#permalink

Собственно, если нет необходимости в минимальном и максимальном порогах числа ... можно пофантазировать на тему "длины" числа, а именно :

alert(parseInt(Math.random().toString().substr(2,8)));

Что можно развернуть, во что-то такое :

function randomByLength(min,max){
var a=0;while(!a||a.toString().length<min)
a=parseInt(Math.random().toString().substr(2,max));
return a;
}
alert(randomByLength(1,3));

randomByLength(1,3) - вернет число от 1 до 999
randomByLength(3,5) - вернет число от 999 до 99999
Собственно допиливать можно много чего, но как альтернатива - достойное жизни решение


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 15:07
#permalink

Мля, зачем столько тупых ненужных операций работы со строками, когда быстрее и оптимальнее будет getRandomInt(100, 99999) -- вот тебе и число от 3 до 5 цифр. И да, у тебя тупая опечатка - трехзначное число начинается не от 999, а от 100.


Автор: SP7, дата: 24 октября, 2013 - 22:02
#permalink

Интересно, а почему работу метода Math реализовали именно подобным образом, а не сделали изначально так, чтобы он возвращал случайное число из переданного ему диапазона?


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 15:09
#permalink

Потому что встроенная функция для работы с диапазоном была бы точно такой же, какой ее может написать любой программист.


Автор: Гость (не зарегистрирован), дата: 6 декабря, 2013 - 01:35
#permalink

В описание было бы очень здорово добавить то, что функция возвращает число от 0 до 1, в справочник ведь именно это и идут узнать.


Автор: Гость (не зарегистрирован), дата: 7 декабря, 2013 - 11:29
#permalink

А как это работает?

var n = ~~(Math.random()*3);

меня двойная тильда смущает


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2017 - 22:42
#permalink

~~ Приводит число к целому

~ Приводит число к целому отрицательному


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2017 - 22:43
#permalink

А вообще, если не понимаешь как работает какая-то штука в JS, в хроме нажимаешь F12, заходишь во вкладку Console и пишешь там код на JS


Автор: Гость (не зарегистрирован), дата: 2 июля, 2014 - 22:44
#permalink

мне нужно сделать в html так чтобы решались квадратные уравнения при условии:a*x в квадрате+b*x+c=0
1)D=0 -> 1 корень
2)D>0 -> 2 корня
3)D<0 -> не имеет решений
Кол-во корней (?)

D
x1
x2
Дескрименант и иксы должны быть определеными коофициэнтами


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 15:16
#permalink

мм*, разумеется.


Автор: FANTOM22A, дата: 20 октября, 2014 - 22:28
#permalink

function getRandomArbitary(min, max)
{
return Math.random() * (max - min) + min;
}

здесь ноль может генерировать или от одного?


Автор: Илья Владимирович (не зарегистрирован), дата: 6 ноября, 2014 - 11:44
#permalink

Не могу подобрать код, чтобы нажимая на картинку переходить случайно на одну из 20 страниц.


Автор: Андрей Изман (не зарегистрирован), дата: 6 декабря, 2014 - 03:42
#permalink

А так не проще:

return Math.random() % (max - min + 1) + min;

вернет целое число в диапазоне (min, max)


Автор: Андрей Изман (не зарегистрирован), дата: 6 декабря, 2014 - 03:51
#permalink

Сорри, за предыдущий код, вот правильный

function random(min, max) {
	return parseInt(Math.random() * (max - min + 1)+ min);
}

Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 15:21
#permalink

parseInt()?? Серьезно?? Функция для парсинга строк, там где их нет? Да уж, у тебя извращенное предствление о понятии "так проще".


Автор: Гость (не зарегистрирован), дата: 8 декабря, 2014 - 19:28
#permalink

Никак не могу найти однозначного ответа для моей задачи. Нужна помощь разбирающихся в данной теме.

Есть код:
var tmp= Math.round((Math.random() * 99 + 1)); // покажет число из от 1 до 100

Что необходимо сделать, чтобы исключить при показе следующие диапазоны цифр:
от 1 до 4, от 22 до 24, от 32 до 34

Заранее благодарю за помощь!


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 15:35
#permalink

1. НЕ НУЖНО использовать round() при работе с рандомными числами!
2. Диапазон от min до max делается правильно так, как уже давно за тебя сделали в этой статье.
3. "чтобы исключить при показе". Так исключи при ПОКАЗЕ. Как только присвоилось число из данного диапазона - вызови функцию random повторно, такой механизм лучше всего сделать в цикле. С твоим диапазоном зацикливание не светит. Ладно, вот код:

var shit_numbers = [1, 2, 3, 4, 22, 23, 24, 32, 33, 34];
var rnd;
do {
  rnd = getRandomInt(1, 100); // ф-ция из статьи
} while (shit_numbers.indexOf(rnd) != -1);

Автор: Ergamon (не зарегистрирован), дата: 20 января, 2015 - 03:41
#permalink
+Math.random().toFixed()

Выдаст случайное число 1 или 0


Автор: Гость (не зарегистрирован), дата: 27 февраля, 2015 - 13:02
#permalink

А как получить посредством Math.random() случайный id html элементов? Вроде min и max тут не совсем те категории?


Автор: Гость (не зарегистрирован), дата: 7 марта, 2015 - 01:34
#permalink

наверное надо сначала сохранить в массиве id->значение а потом рандомно выбирать.я js только начал изучать поэтому незнаю можно ли с помощтю DOM такое проделывать


Автор: konabis777 (не зарегистрирован), дата: 16 июня, 2015 - 02:25
#permalink

Здравствуйте у меня вопрос по третьему примеру зачем "+1"?
Может ли Math.random() = 1;?
Вдруг переменные сложатся так:
Math.floor(Math.random(1) * (10 - 5 + 1)) + 5;
Math.floor(Math.random() * (max - min + 1)) + min;


Автор: Гость (не зарегистрирован), дата: 16 августа, 2015 - 10:40
#permalink

Рассмотрим подробно как работает наш пример и почему используется именно такая форма записи. Первым делом нам надо указать минимальное получаемое значение из нужного диапазона, в нашем примере это число 50. Теперь нам нужно каким-то образом получить случайное число, которое при сложении с числом 50 не будет превышать в сумме число 100. Как мы знаем из математики, нахождение неизвестного слагаемого делается путём вычитания из суммы известного слагаемого. 100 - 50: получаем разность 50. Теперь для проверки, подходит нам это число или нет, умножим его на возможное минимальное и максимальное число возвращаемое методом Math.random(). Умножаем минимальное 0.004704564176082244 * 50 = 0.2... и максимальное 0.9999999999746223 * 50 = 49.9... И так мы видим, что при умножении разности на максимально возможное случайное число в результате даёт нам целую часть числа на единицу меньше, чем нужно. Чтобы исправить ситуацию, нам нужно всего лишь прибавить одну единицу к 50, т.е. 50 + 1 = 51, теперь если полученное число умножить на максимально возможно число возвращаемое методом у нас будет выходить число 50.9... - это то, что нам надо, после сложения чисел 50.9 + 50, получаем 100.9. Для округления числа до целого используем метод Math.floor(). Таким образом, формула для получения нужного числа выглядит следующим образом: max - min + 1.


Автор: Гость (не зарегистрирован), дата: 30 октября, 2016 - 03:24
#permalink

Но Math.floor изменяет до большего или меньшего целого, тогда почему в Вашем примере она от 100.9 возвращает 100, а не 101 ?


Автор: Гость (не зарегистрирован), дата: 30 ноября, 2015 - 02:35
#permalink
function getRandomInt(min, max)
{
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

Объясните мне пожалуйста математику.
Почему мы рандомное число от 0 до 0.999... умножаем на разницу +1 и потом еще прибавляем минимальное значение?
Если с разницей я вроде что-то понял - мы же число должны получить рандомное из заданного диапазона, поэтому и указан диапазон,кроме того минимальное значение вполне возможно, что не ноль.


Автор: Гость (не зарегистрирован), дата: 17 марта, 2016 - 21:22
#permalink

Если кому интересно увидеть, что будет при разных округлениях. Вот скрипт.

function getRandomIntFloor(min, max){
return Math.floor(Math.random()*(max-min+1))+min;
}

function getRandomIntCeil(min, max){
return Math.ceil(Math.random()*(max-min+1))+min;
}

function getRandomIntRound(min, max){
return Math.round(Math.random()*(max-min+1))+min;
}

var arr1 = [];
var arr2 = [];
var arr3 = [];
for (var i = 0; i < 100000; i++){
arr1.push(getRandomIntFloor(0,100));//Math.floor - округляет вниз (3.1 = 3)
arr2.push(getRandomIntCeil(0,100));//Math.ceil - округляет вверх (3.1 =4)
arr3.push(getRandomIntRound(0,100));//Math.round - округляет до ближайшего целого
}

function getArr(arr) {
var n1 = 0;//счетчик нулевых значений
var n2 = 0;//счетчик значений равных 100
var n3 = 0;//счетчик значений равных 101
for (var i = 0; i < arr.length; i++) {
if (arr[i] == 0) {
n1++;
} else if (arr[i] == 100) {
n2++;
} else if (arr[i] == 101) {
n3++;
}
}

return 'Количество нулей = ' + n1 + '. Количество 100 = ' + n2 + '. Количество 101 = ' + n3 + '.';
}

alert('Применение Math.floor: ' + getArr(arr1));
alert('Применение Math.ceil: ' + getArr(arr2));
alert('Применение Math.round: ' + getArr(arr3));


Автор: Гость (не зарегистрирован), дата: 23 июня, 2016 - 20:00
#permalink

min будет генерироваться чуть чаще, т.к. генерироваться будет [min ; max). Почему так?


Автор: aha (не зарегистрирован), дата: 19 августа, 2016 - 17:46
#permalink

Наконец-то про floor вспомнили..


Автор: Im boss (не зарегистрирован), дата: 19 октября, 2017 - 16:18
#permalink

Vasya

Ds kj[b dct ,kzlm t,fyst yf[eq
А теперь переведите это на клаве с английского на руский!

[js]
[html]
[css]
[css]
[/css][/css][/html][/js]

Автор: Гость (не зарегистрирован), дата: 12 июня, 2018 - 20:47
#permalink

неплохо


Автор: Гость, дата: 12 июня, 2018 - 20:47
#permalink

но можно и лучше


Автор: Разработчик (не зарегистрирован), дата: 12 июня, 2018 - 20:54
#permalink

Очень понравился материал, но можно и подробнее, очень помогает при разработке. Спасибо!


Автор: Гость (не зарегистрирован), дата: 5 октября, 2019 - 19:14
#permalink

мамин хацкер ты куда xss то пишешь?


Автор: krisburger (не зарегистрирован), дата: 27 сентября, 2020 - 12:53
#permalink

Добрый день, может кто подскажет...Не работает Math.random не переходит в курсив. Причем вводишь Mat идет курсив. Стоит только ввести h - курсив сразу пропадает. В чем может быть причина?


 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum