Угадай число, Math.random / round
Программирование тесты — проходи тест — получай подарки. В этой статье рассмотрим Math.random / round. Способ Math.random() возвращает псевдослучайное число с плавающей запятой из диапазона [ноль00099″>ноль, один), то есть, от 0 (включительно) до одного (но не включая один), которое после этого можно отмасштабировать до необходимого диапазона. Реализация сама выбирает исходное зерно для алгорифма генерации случайных чисел; оно не может быть выбрано либо сброшено пользователем.
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
console.log(getRandomInt(3));
// expected output: 0, 1 or 2
console.log(getRandomInt(1));
// expected output: 0
console.log(Math.random());
// expected output: a number from 0 to <1
Важно: метод Math.random()
не предоставляет криптографически стойкие случайные числа. Не используйте его ни для чего, связанного с безопасностью. Вместо него используйте Web Crypto API (API криптографии в вебе).
Синтаксис
Math.random()
Возвращаемое значение
Псевдослучайное число с плавающей запятой от 0
(включительно) до 1 (не считая).
Программирование тесты: проходи тест, получай сертификат, обменивай его на подарки
Примеры
Стоит обратить внимание, что поскольку числа в JavaScript являются числами с плавающей запятой стандарта IEEE 754 с поведением при округлении к ближайшему чётному, все эти диапазоны (исключая диапазон с простым вызовом Math.random()
), не точны. Если заданы очень большие границы (253 или выше), возможен крайне редкий случай вычисления обычно исключённой верхней границы.
Получение случайного числа от 0 (включительно) до 1 (не включая)
function getRandom() {
return Math.random();
}
Получение случайного числа в заданном интервале
В єтом примере происходит возвращение случайного число в заданном интервале. Возвращаемое значение не менее (и может быть равно) min
и не более (и не равно) max
.
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
Получение случайного целого числа в заданном интервале
Этот пример возвращает случайное целое число в заданном интервале. Возвращаемое значение не менее min
(или следующее целое число, которое больше min
, если min
не целое) и не более (но не равно) max
.
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min; //Максимум не включается, минимум включается
}
Может показаться заманчивым использовать Math.round()
для округления, но это может сделать распределение неравномерным, что может оказаться неприемлемым для ваших нужд.
Получение случайного целого числа в заданном интервале, включительно
Функция getRandomInt()
выше включает минимальное значение, но не включает максимальное. Но в случаях, если вам нужно, чтобы включалось и минимальное, и максимальное значение? Функция getRandomIntInclusive()
удовлетворит ваш запрос.
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; //Максимум и минимум включаются
}
Спецификации
Specification |
---|
ECMAScript Language Specification (ECMAScript) # sec-math.random |
Совместимость с браузерами
Программирование тесты — проверь себя прямо сейчас
Math.round()
Сводка
Метод Math.round()
повертає число, округлене к найближчому цілому.
Синтаксис
Math.round(x)
Параметры
x
- Число.
Опис
У випадку коли дробна частина чисел більше, або рівна 0,5, аргумент буде округлений до найближчого більшого цілого. Якщо дробна частина числа менше 0,5, аргумент буде округлений до найближчого меншого цілого.
Оскільки метод round()
є статичним методом об’єкта Math
, ви завжди повинні використовувати його як Math.round()
, а не намагатися викликати метод на створеному екземплярі об’єкта Math
(поскольку об’єкта Math
не є конструктором).
Приклади
Приклад: використання методу Math.round()
// Вернёт значение 20
x = Math.round(20.49);
// Вернёт значение 21
x = Math.round(20.5);
// Вернёт значение -20
x = Math.round(-20.5);
// Вернёт значение -21
x = Math.round(-20.51);
// Вернёт значение 1 (!)
// Обратите внимание на ошибку округления из-за неточности арифметики с плавающей запятой
// Сравните этот результат с результатом Math.round(1.005, -2) из следующего примера
x = Math.round(1.005*100)/100;
Приклад: корректировка округления десятичных дробей
// Замыкание
(function() {
/**
* Корректировка округления десятичных дробей.
*
* @param {String} type Тип корректировки.
* @param {Number} value Число.
* @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).
* @returns {Number} Скорректированное значение.
*/
function decimalAdjust(type, value, exp) {
// Если степень не определена, либо равна нулю...
if (typeof exp === 'undefined' || +exp === 0) {
return Math[type](value);
}
value = +value;
exp = +exp;
// Если значение не является числом, либо степень не является целым числом...
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
return NaN;
}
// Сдвиг разрядов
value = value.toString().split('e');
value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
// Обратный сдвиг
value = value.toString().split('e');
return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
}
// Десятичное округление к ближайшему
if (!Math.round10) {
Math.round10 = function(value, exp) {
return decimalAdjust('round', value, exp);
};
}
// Десятичное округление вниз
if (!Math.floor10) {
Math.floor10 = function(value, exp) {
return decimalAdjust('floor', value, exp);
};
}
// Десятичное округление вверх
if (!Math.ceil10) {
Math.ceil10 = function(value, exp) {
return decimalAdjust('ceil', value, exp);
};
}
})();
// Округление к ближайшему
Math.round10(55.55, -1); // 55.6
Math.round10(55.549, -1); // 55.5
Math.round10(55, 1); // 60
Math.round10(54.9, 1); // 50
Math.round10(-55.55, -1); // -55.5
Math.round10(-55.551, -1); // -55.6
Math.round10(-55, 1); // -50
Math.round10(-55.1, 1); // -60
Math.round10(1.005, -2); // 1.01 -- сравните этот результат с результатом Math.round(1.005*100)/100 выше
// Округление вниз
Math.floor10(55.59, -1); // 55.5
Math.floor10(59, 1); // 50
Math.floor10(-55.51, -1); // -55.6
Math.floor10(-51, 1); // -60
// Округление вверх
Math.ceil10(55.51, -1); // 55.6
Math.ceil10(51, 1); // 60
Math.ceil10(-55.59, -1); // -55.5
Math.ceil10(-59, 1); // -50
Спецификация
Спецификация |
---|
Спецификация языка ECMAScript (ECMAScript) # sec-math.round |
Совместимость з браузерами
Если у вас есть желание освоить программирование — приглашаем вас на курсы. У нас есть широкий выбор направлений: SCRATCH, HTML / CSS, JAVASCRIPT, UNITY, С, С #, С ++, Python.