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 - 18:46
#permalink

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


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

Шакал!


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

Сам шакал, в рот тебя ебать!


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

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

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

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


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

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


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

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


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

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


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

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


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

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


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

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

C чего бы это?


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

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


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

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


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

Воистину


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

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


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

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


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

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


Автор: monolithed, дата: 8 мая, 2011 - 00:35
#permalink
console.log((Math.random()*10)+1|0); //min - 1, max - 10

Автор: Гуля1 (не зарегистрирован), дата: 12 июня, 2011 - 00: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 - 17:27
#permalink

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


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

Ну ты и тупой.... Такой быдлокод написал, что я фигею...


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

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


Автор: kuzroman, дата: 14 сентября, 2011 - 19: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 - 16:01
#permalink

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


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

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


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

а нельзя

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

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

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


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

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


Автор: Гость (не зарегистрирован), дата: 14 ноября, 2012 - 23: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:57
#permalink

Ты дибил! Math.random() НИКОГДА не даст 1. Такова спецификация функции.


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

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


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

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


Автор: OP3, дата: 25 июня, 2013 - 17: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 - 16:07
#permalink

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


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

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


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

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


Автор: Гость (не зарегистрирован), дата: 8 ноября, 2013 - 20:11
#permalink
[php]
[css]
[css]
[css]
gy[/css][/css][/css][/php]

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

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


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

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

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

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


Автор: Гость (не зарегистрирован), дата: 20 марта, 2014 - 15:41
#permalink


SASAI LALKA


Автор: Лапкастая пиздень (не зарегистрирован), дата: 12 мая, 2014 - 22:00
#permalink

>> "конечно всё однозначно помогло вот только подскажите как это рандомное значение присвоить переменной?"
>> "а вот кстате и еще 1 подвох смотрите т к функция присваивает дробное значение то после такой функции результаты частенько придется округлять"
УебенцЫ!


Автор: Гость (не зарегистрирован), дата: 2 июля, 2014 - 23: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 - 16:15
#permalink

Дескрименант? коофициэнты?

Мля, чел, иди учи русский. А заодно и математику, раз не знаешь как решать ЭЛЕМЕНТАРНЫЕ квадратные уравнения. И програмирование, раз просишь написать прогу за тебя.


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

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


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

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

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


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

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2014 - 16: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 - 04:41
#permalink
+Math.random().toFixed()

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


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

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


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

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


Автор: Гость (не зарегистрирован), дата: 12 мая, 2015 - 17:56
#permalink

Автор: Лис (не зарегистрирован), дата: 12 мая, 2015 - 18:00
#permalink

ШАКАЛ 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Автор: konabis777 (не зарегистрирован), дата: 16 июня, 2015 - 03: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 - 11: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 ноября, 2015 - 03:35
#permalink
function getRandomInt(min, max)
{
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

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


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

(function($) {
var $fortune = function(args) {

if (args === undefined) {
throw(new Error("You must define the options.prices"));
}

var options = $.extend({}, {
prices: args,
duration: 1000,
separation: 2,
min_spins: 10,
max_spins: 15,
direction: "left",
onSpinBounce: function() {}
}, args);

var fortune = this;
var prices_amount = Array.isArray(options.prices)?options.prices.length:options.prices;
var prices_delta = 360 / prices_amount;
var is_spinning = false;

fortune.spin = function(price) {
price = typeof price === "number"?price:Math.floor(Math.random() * prices_amount);
var deferred = $.Deferred();
var position = Math.floor(prices_delta * (price - 1/2) + randomBetween(options.separation, prices_delta - options.separation));
var spins = randomBetween(options.min_spins, options.max_spins);
var final_position = 360 * spins + position;
var prev_position = 0;
var is_bouncing = false;

is_spinning = true;
var direct = (options.direction == "left") ? "-" : "";
fortune
.css({
"transform": "rotate(" + direct + final_position + "deg)",
"-webkit-transform": "rotate(" + direct + final_position + "deg)",
"transition": "transform " + options.duration + "ms cubic-bezier(.17,.67,.12,.99)",
"-webkit-transition": "-webkit-transform " + options.duration + "ms cubic-bezier(.17,.67,.12,.99)"
})
.siblings('.spin').removeClass('bounce');

var bounceSpin = function() {
var curPosition = Math.floor(getRotationDegrees(fortune)),
mod = Math.floor((curPosition + prices_delta*0.5) % prices_delta),
diff_position,
position_threshold = prices_delta/5,
distance_threshold = prices_delta/10;

prev_position = Math.floor(curPosition < prev_position ? prev_position - 360 : prev_position);
diff_position = curPosition - prev_position;

if ((mod < position_threshold && diff_position < distance_threshold) ||
(mod < position_threshold*3 && diff_position >= distance_threshold)) {
if (!is_bouncing) {
fortune.siblings('.spin').addClass('bounce');
options.onSpinBounce(fortune.siblings('.spin'));
is_bouncing = true;
}
} else {
fortune.siblings('.spin').removeClass('bounce');
is_bouncing = false;
}

if (is_spinning) {
prev_position = curPosition;
requestAnimationFrame(bounceSpin);
}
};

var animSpin = requestAnimationFrame(bounceSpin);
var direct = (options.direction == "left") ? "-" : "";
setTimeout(function() {
fortune
.css({
"transform": "rotate(" + direct + position + "deg)",
"-webkit-transform": "rotate(" + direct + position + "deg)",
"transition": "",
"-webkit-transition": ""
})
.siblings('.spin').removeClass('bounce');

cancelAnimationFrame(animSpin);
deferred.resolve(Array.isArray(options.prices)?options.prices[price]:price);
is_spinning = false;
}, options.duration);

return deferred.promise();
};

var getRotationDegrees = function(obj) {
var angle = 0,
matrix = obj.css("-webkit-transform") ||
obj.css("-moz-transform") ||
obj.css("-ms-transform") ||
obj.css("-o-transform") ||
obj.css("transform");
if (matrix !== 'none') {
var values = matrix.split('(')[1].split(')')[0].split(','),
a = values[0],
b = values[1],
radians = Math.atan2(b, a);

if ( radians < 0 ) {
radians += (2 * Math.PI);
}

angle = Math.round( radians * (180/Math.PI));
}

return angle;
};

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

return fortune;
};

$.extend($.fn, {
fortune: $fortune
});
}) (jQuery);


Автор: Гость (не зарегистрирован), дата: 17 марта, 2016 - 22: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));


Автор: Гость (не зарегистрирован), дата: 4 мая, 2016 - 14:46
#permalink

super


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

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


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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