Вгадай число, 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, C, C #, C++, Python. Програмування тести – перевір свої знання.