Заметим, что числа в яваскрипт хранятся в формате с плавающей точкой 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;
}
добавил в копилку))
Шакал!
А почему нельзя сделать так?
Или есть подвох?
Ой блин!
Я Math.random(); перепутал с пхпшным rand();
))
function getRandomArbitary(min, max)
{return Math.random() * (max - min) + min;}
А зачем "* (max - min)"?
Math.random() возвращает дробное число от 0 до 1.
0 ≤ Math.random() < 1
Поэтому нужно получить случайное число от 0 до разницы между максимумом и минимумом (решается умножением этой разницы на случайное число) и добавить минимум.
Math.floor(Math.random() * (max - min + 1)) + min;
В результате будет число min, т.к. умножение на 0 идет
C чего бы это?
конечно всё однозначно помогло вот только подскажите как это рандомное значение присвоить переменной?
а вот кстате и еще 1 подвох смотрите т к функция присваивает дробное значение то после такой функции результаты частенько придется округлять
Воистину
По моему, выражение по поиску случайного целого между min и max Math.floor(Math.random() * (max - min + 1)) + min; даст дробный результат, если min будет дробным.
И еще, не учитывается, что может быть 2 дробных числа, между которыми не существует целого, например 1,5 и 1,7.
Ну вы еще про то, что max может оказаться меньше чем min скажите
function getRandomArbitary(min, max) { return Math.random() * (max - min) + min; }// использование Math.round() даст неравномерное распределение! function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }Зачем такие "Сложности"?Когда можно так:
function getRandomArbitary (max) { return Math.random() * max; }function getRandomArbitary (max) { return Math.random() * (max +1); }// использование Math.round() даст неравномерное распределение! function getRandomInt(min, max) { return Math.floor(Math.random() * max)+min; }function getRandomInt { return Math.floor(Math.random() * 6)+6;//11 }ты хоть сам проверь вначале свой код)
как альтернатива:
Math.floor(Math.random()*196) + 5 // от 5 до 200
// случайное число без повторов!
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;
}
а нельзя
function random(max){math.floor(math.random() * max);}Math.Random(0,56); - случайное число от 0 до 56.
А как задать чтобы ряд чисел был по порядку от 0 до 56 ?
Спасибо автору, всё работает.
Добрый день. НАРОД, помогите, никак не получается((
нужно попросить у пользователя номер телефона в формате 1(111)111-1111.
С помощью регулярных выражений его нужно проверить, но если ошибка (пользователя) нужно выводить сообщение об этой ошибке. Как это сделать правильно, и чтобы работало без ошибок. Нужна ваша помощь, буду очень признателен.
Я правильно понимаю, что math.floor(math.random()*max) никогда не даст max, а только max-1, так как math.random() не возвращает единицу (точнее от 0 вкл. до 1 невкл.), и math.floor округляет вниз (меньше или равно)? Я юзаю math.round(math.random()max) - округление по правилам арифметики. По-моему, так имеется вполне реальная вероятность получения как min, так и max значения.
Если что - ногами не пинать ))) я экономист, а не программист.
Просьба удалить мой первый пост. It was dumb.
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.