Math.random() в JavaScript — генерация случайных чисел, целых, в диапазоне, дробных
Содержание- Синтаксис
- Особенности генерации случайных чисел
- Случайное число в диапазоне
- Целое число в диапазоне
- Случайное число в диапазоне включительно max
- Итого
Math.random() — это функция встроенного объекта Math, которая возвращает псевдослучайное число с плавающей запятой из диапазона от 0 включительно, до 1 не включительно.
Синтаксис
Math.random()
У метода нет параметров.
Опубликуем результат в console.
let randomNumber = Math.random()
console.log(randomNumber)
// или просто
console.log(Math.random())
Особенности генерации случайных чисел
1. Math.random() генерирует случайные числа на основе алгоритма, который в итоге можно просчитать, поэтому метод не подходит там, где речь идет о безопасности.
2. Разработчик или пользователь не может выбрать алгоритм, который будет использовать метод для генерации рандомного числа.
3. Math.random() формирует числа похожие на 0.6592126750964376 или 0.4571938784553331. В дальнейшем результат масштабируются до нужного формата и диапазона.
4. Результатом метода может быть ноль, но единица никогда.
5. В сферах связанных с безопасностью рекомендуется использовать Web Cryptography API и его методы getRandomValues() и generateKey().
Случайное число в диапазоне
Для того, чтобы получить случайное число в заданном интервале можно использовать следующую функцию.
function getRandomNumber(min, max) {
return Math.random() * (max - min) + min
}
Целое число в диапазоне
Получаем целое число от минимума (включительно) до максимума (не включительно)
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min) + min)
}
или
function getRandomNumber(min, max) {
min = Math.
ceil(min)
max = Math.floor(max)
return Math.floor(Math.random() * (max - min) + min)
}
ceil() — округляет в большую сторону, floor() в меньшую.
Случайное число в диапазоне включительно max
Функция учитывает недостатки предыдущих решений и выводит случайные числа от и до включительно для обоих случаев.
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
или
function getRandomNumber(min, max) {
min = Math.ceil(min)
max = Math.floor(max)
return Math.floor(Math.random() * (max - min + 1)) + min
}
или
function getRandomNumber(min, max) {
return Math.round(min - 0.5 + Math.random() * (max - min + 1))
}
round() — округляет до ближайшего целого.
Итого
Math.random() генерирует псевдослучайное число от 0 до 1 (не включительно). Метод не содержит параметров, а его результаты удобно форматировать, тем самым получая случайные целые или дробные числа в необходимом диапазоне.
Js.Математика | ReScript API
Предоставляет утилиты для JS Math. Примечание: константы _E , _LN10 , _LN2 , _LOG10E , _LOG2E , _PI , 9000 3 _SQRT1_2 и _SQRT2 начинаются со знака подчеркивания, поскольку имена переменных ReasonML не могут начинаться с заглавной буквы . (Имена модулей начинаются с верхнего регистра.)
_E
let _E: float
число Эйлера; ≈ 2,718281828459045. См. Math.E на MDN.
_LN2
пусть _LN2: с плавающей запятой
Натуральный логарифм 2; ≈ 0,6931471805599453. См. Math.LN2 на MDN.
_LN10
пусть _LN10: с плавающей запятой
Натуральный логарифм 10; ≈ 2,302585092994046. См. Math.LN10 на MDN.
_LOG2E
пусть _LOG2E: с плавающей запятой
Логарифм E по основанию 2; ≈ 1,4426950408889634.
См. Math.LOG2E на MDN.
_LOG10E
пусть _LOG10E: с плавающей запятой
Логарифм Е по основанию 10; ≈ 0,43429448118. См. Math.LOG10E на MDN.
_PI
пусть _PI: с плавающей запятой
Пи — отношение длины окружности к диаметру окружности; ≈ 3,141592653589793. См. Math.PI на MDN.
_SQRT1_2
пусть _SQRT1_2: с плавающей запятой
Корень квадратный из 1/2; ≈ 0,7071067811865476. См. Math.SQRT1_2 на MDN.
_SQRT2
пусть _SQRT2: с плавающей запятой
Квадратный корень из 2; ≈ 1,4142135623730951. См. Math.SQRT2 на MDN.
abs_int
пусть abs_int: int => int
Абсолютное значение целочисленного аргумента. См. Math.abs на MDN.
abs_float
let abs_float: float => float
Абсолютное значение аргумента с плавающей запятой.
См. Math.abs на MDN.
acos
let acos: float => float
Арккосинус аргумента (в радианах); возвращает NaN , если аргумент находится за пределами диапазона [-1.0, 1.0]. См. Math.acos на MDN.
acosh
let acosh: float => float
Гиперболический арккосинус (в радианах) аргумента; возвращает NaN , если аргумент меньше 1,0. См. Math.acosh на MDN.
asin
let asin: float => float
Арксинус (в радианах) аргумента; возвращает NaN , если аргумент находится за пределами диапазона [-1.0, 1.0]. См. Math.asin на MDN.
asinh
let asinh: float => float
Гиперболический арксинус (в радианах) аргумента. См. Math.asinh на MDN.
atan
let atan: float => float
Арктангенс аргумента (в радианах).
См. Math.atan на MDN.
atanh
let atanh: float => float
Гиперболический арктангенс (в радианах) аргумента; возвращает , если аргумент находится за пределами диапазона [-1.0, 1.0]. Возвращает -Infinity и Infinity для аргументов -1.0 и 1.0. См. Math.atanh на MDN.
atan2
let atan2: (~y: float, ~x: float, unit) => float
Возвращает угол (в радианах) частного y/. х . Это также угол между осью x и точкой ( x , y ). См. Math.atan2 на MDN.
RES
Js.Math.atan2(~y=0.0, ~x=10.0, ()) == 0.0 Js.Math.atan2(~x=5.0, ~y=5.0, ()) == Js.Math._PI /. 4.0 Js.Math.atan2(~x=-5.0, ~y=5.0, ()) Js.Math.atan2(~x=-5.0, ~y=5.0, ()) == 3.0 *. Js.Math._PI/. 4.0 Js.Math.atan2(~x=-0.0, ~y=-5.0, ()) == -.Js.Math._PI /. 2.0
cbrt
let cbrt: float => float
Кубический корень.
См. Math.cbrt на MDN
unsafe_ceil_int
let unsafe_ceil_int: float => int
Возвращает наименьшее целое число, большее или равное аргументу. Эта функция может возвращать значения, не представляемые int , диапазон которых составляет от -2147483648 до 2147483647. Это связано с тем, что в JavaScript есть только 64-битные числа с плавающей запятой, которые могут представлять целые числа в диапазоне ±(2 Math.ceil на MDN.
RES
Js.Math.unsafe_ceil_int(3.1) == 4 Js.Math.unsafe_ceil_int(3.0) == 3 Js.Math.unsafe_ceil_int(-3.1) == -3 Js.Math.unsafe_ceil_int(1.0e15) // результат выходит за пределы диапазона типа данных int
unsafe_ceil
let unsafe_ceil: float => int
Устарело; вместо этого используйте unsafe_ceil_int .
ceil_int
пусть ceil_int: float => int
Возвращает наименьшее int
int : от -2147483648 до 2147483647.
См. Math.ceil на MDN.RES
Js.Math.ceil_int(3.1) == 4 Js.Math.ceil_int(3.0) == 3 Js.Math.ceil_int(-3.1) == -3 Js.Math.ceil_int(-1.0e15) == -2147483648 Js.Math.ceil_int(1.0e15) == 2147483647
ceil
let ceil: float => int
Устарело; вместо этого используйте ceil_int .
ceil_float
let ceil_float: float => float
Возвращает наименьшее целочисленное значение, большее или равное аргументу. Результатом является число , которое не ограничено диапазоном типов данных int . См. Math.ceil на MDN.
РЭС
Js.Math.ceil_float(3.1) == 4.0 Js.Math.ceil_float(3.0) == 3.0 Js.Math.ceil_float(-3.1) == -3.0 Js.Math.ceil_float(2_150_000_000.3) == 2_150_000_001.0
clz32
пусть clz32: int => int
Количество начальных нулей в 32-битном представлении аргумента типа int.
См. Math.clz32 на MDN.
RES
Js.Math.clz32(0) == 32 Js.Math.clz32(-1) == 0 Js.Math.clz32(255) == 24
cos
let cos: float => float
Косинус аргумента, который должен быть указан в радианах. См. Math.cos на MDN.
cosh
let cosh: float => float
Гиперболический косинус аргумента, который должен быть указан в радианах. См. Math.cosh на MDN.
exp
let exp: float => float
Натуральная экспоненциальная; возвращает e (основание натуральных логарифмов) в степени данного аргумента. См. Math.exp на MDN.
expm1
let expm1: float => float
Возвращает e (основание натуральных логарифмов) в степени заданного аргумента минус 1. См. Math.expm1 на MDN.
unsafe_floor_int
let unsafe_floor_int: float => int
Возвращает наибольшее целое число, меньшее или равное аргументу.
Эта функция может возвращать значения, не представляемые int , диапазон которых составляет от -2147483648 до 2147483647. Это связано с тем, что в JavaScript существуют только 64-битные числа с плавающей запятой, которые могут представлять целые числа в диапазоне ±(2 53 -1) точно. См. Math.floor на MDN.
RES
Js.Math.unsafe_floor_int(3.7) == 3 Js.Math.unsafe_floor_int(3.0) == 3 Js.Math.unsafe_floor_int(-3.7) == -4 Js.Math.unsafe_floor_int(1.0e15) // результат выходит за пределы диапазона типа данных int
unsafe_floor
let unsafe_floor: float => int
Устарело; вместо этого используйте unsafe_floor_int .
floor_int
let floor_int: float => int
Возвращает наибольшее значение int меньшее или равное аргументу; результат прикрепляется к диапазону типа данных int : от -2147483648 до 2147483647.
См. Math.floor на MDN.
RES
Js.Math.floor_int(3.7) == 3 Js.Math.floor_int(3.0) == 3 Js.Math.floor_int(-3.1) == -4 Js.Math.floor_int(-1.0e15) == -2147483648 Js.Math.floor_int(1.0e15) == 2147483647
этаж
let floor: float => int
Устарело; вместо этого используйте floor_int .
floor_float
let floor_float: float => float
Возвращает наибольшее целочисленное значение, меньшее или равное аргументу. Результат — float и не ограничивается диапазоном типов данных int . См. Math.floor на MDN.
RES
Js.Math.floor_float(3.7) == 3.0 Js.Math.floor_float(3.0) == 3.0 Js.Math.floor_float(-3.1) == -4.0 Js.Math.floor_float(2_150_000_000.3) == 2_150_000_000.0
fround
let fround: float => float
Округление до ближайшего числа с плавающей запятой одинарной точности.
См. Math.fround на MDN.
RES
Js.Math.fround(5.5) == 5.5 Js.Math.fround(5.05) == 5.0500001863
гипот
let гипот: (плавающий, плавающий) => плавающий
Возвращает квадратный корень из суммы квадратов двух аргументов (формула Пифагора). См. Math.hypot на MDN.
hypotMany
let hypotMany: array => float
Возвращает квадратный корень из суммы квадратов чисел в аргументе-массиве (обобщенное уравнение Пифагора). Использование массива позволяет вам иметь более двух элементов. См. Math.hypot на MDN.
RES
Js.Math.hypotMany([3.0, 4.0, 12.0]) == 13.0
imul
let imul: (int, int) => int
Умножение 32-битных целых чисел. Используйте это только тогда, когда вам нужно оптимизировать производительность умножения чисел, хранящихся как 32-битные целые числа.
См. Math.imul на MDN.
журнал
пусть журнал: float => float
Возвращает натуральный логарифм аргумента; это число x такое, что e x равно аргументу. Возвращает NaN для отрицательных аргументов. См. Math.log на MDN.
RES
Js.Math.log(Js.Math._E) == 1,0 Js.Math.log(100.0) == 4.605170185988092
log1p
let log1p: float => float
Возвращает натуральный логарифм единицы плюс аргумент. Возвращает NaN для аргументов меньше -1. См. Math.log1p на MDN.
RES
Js.Math.log1p(Js.Math._E - 1.0) == 1.0 Js.Math.log1p(99.0) == 4.605170185988092
log10
let log10: float => float
Возвращает логарифм аргумента по основанию 10. Возвращает NaN для отрицательных аргументов.
См. Math.log10 на MDN.
RES
Js.Math.log10(1000.0) == 3.0 Js.Math.log10(0,01) == -2,0 Js.Math.log10(Js.Math.sqrt(10.0)) == 0,5
log2
let log2: float => float
Возвращает логарифм аргумента по основанию 2. Возвращает NaN для отрицательных аргументов. См. Math.log2 на MDN.
СРЕ
Js.Math.log2(512.0) == 9.0 Js.Math.log2(0,125) == -3,0 Js.Math.log2(Js.Math._SQRT2) == 0.5000000000000001 // из-за точности
max_int
let max_int: (int, int) => int
Возвращает максимальное значение из двух целочисленных аргументов. См. Math.max на MDN.
maxMany_int
let maxMany_int: array => int
Возвращает максимальное число целых чисел в заданном массиве. См. Math.max на MDN.
max_float
let max_float: (float, float) => float
Возвращает максимальное значение из двух аргументов с плавающей запятой.
См. Math.max на MDN.
maxMany_float
let maxMany_float: array => float
Возвращает максимальное значение с плавающей запятой в заданном массиве. См. Math.max на MDN.
мин_целое
let min_int: (int, int) => int
Возвращает минимум двух целочисленных аргументов. См. Math.min на MDN.
minMany_int
let minMany_int: array => int
Возвращает минимум целых чисел в заданном массиве. См. Math.min на MDN.
min_float
let min_float: (float, float) => float
Возвращает минимум двух аргументов с плавающей запятой. См. Math.min на MDN.
minMany_float
let minMany_float: array => float
Возвращает минимум значений с плавающей запятой в заданном массиве. См.
Math.min на MDN.
pow_int
let pow_int: (~base: int, ~exp: int) => int
Возводит заданное основание в указанную степень. (Аргументы и результат являются целыми числами.) См. Math.pow на MDN.
RES
Js.Math.pow_int(~base=3, ~exp=4) == 81
pow_float
let pow_float: (~base: float, ~exp: float) => float
Возводит заданное основание в указанную степень. (Аргументы и результат являются числами с плавающей запятой.) Возвращает NaN , если результат должен быть мнимым. См. Math.pow на MDN.
RES
Js.Math.pow_float(~base=3.0, ~exp=4.0) == 81.0 Js.Math.pow_float(~base=4.0, ~exp=-2.0) == 0,0625 Js.Math.pow_float(~base=625.0, ~exp=0.5) == 25.0 Js.Math.pow_float(~base=625.0, ~exp=-0.5) == 0.04 Js.Float.isNaN(Js.Math.pow_float(~base=-2.0, ~exp=0.5)) == true
random
let random: unit => float
Возвращает случайное число в полузамкнутом интервале [0,1).
См. Math.random на MDN.
random_int
let random_int: (int, int) => int
Вызов random_int(minVal, maxVal) возвращает случайное число в полузамкнутом интервале [minVal, maxVal). См. Math.random на MDN.
небезопасный_раунд
let unsafe_round: float => int
Округляет аргумент до ближайшего целого числа. Для чисел с дробной частью ровно 0,5 аргумент округляется до следующего целого числа в сторону положительной бесконечности. Эта функция может возвращать значения, не представляемые int , диапазон которых составляет от -2147483648 до 2147483647. Это связано с тем, что в JavaScript есть только 64-битные числа с плавающей запятой, которые могут представлять целые числа в диапазоне ±(2 53 -1) точно. См. Math.round на MDN.
RES
Js.Math.unsafe_round(3.7) == 4 Js.Math.unsafe_round(-3.5) == -3 Js.Math.unsafe_round(2_150_000_000_000.3) // вне диапазона для int
округление
округление: float => float
Округляет до ближайшего целого числа (выраженного в виде числа с плавающей запятой). См. Math.round на MDN.
sign_int
let sign_int: int => int
Возвращает знак целочисленного аргумента: -1, если отрицательный, 0, если ноль, 1, если положительный. См. Math.sign на MDN.
sign_float
let sign_float: float => float
Возвращает знак своего аргумента с плавающей запятой: -1,0, если отрицательный, 0,0, если ноль, 1,0, если положительный. См. Math.sign на MDN.
sin
let sin: float => float
Синус аргумента, который должен быть указан в радианах. См. Math.sin на MDN.
sinh
let sinh: float => float
Гиперболический синус аргумента, который должен быть указан в радианах.
См. Math.sinh на MDN.
sqrt
let sqrt: float => float
Квадратный корень. Если аргумент отрицательный, эта функция возвращает NaN . См. Math.sqrt на MDN.
tan
let tan: float => float
Тангенс аргумента, который должен быть указан в радианах. Возвращает NaN , если аргументом является положительная бесконечность или отрицательная бесконечность. См. Math.cos на MDN.
tanh
let tanh: float => float
Гиперболический тангенс аргумента, который должен быть указан в радианах. См. Math.tanh на MDN.
unsafe_trunc
пусть unsafe_trunc: float => int
Усекает свой аргумент; т. е. удаляет дробные цифры. Эта функция может возвращать значения, не представляемые int , диапазон которых составляет от -2147483648 до 2147483647.
Это связано с тем, что в JavaScript существуют только 64-битные числа с плавающей запятой, которые могут представлять целые числа в диапазоне ±(2 53 -1) точно. См. Math.trunc на MDN.
trunc
let trunc: float => float
Усекает свой аргумент; т. е. удаляет дробные цифры. См. Math.trunc на MDN.
Объяснение целочисленного деления в JavaScript
В этом руководстве вы узнаете, как выполнить целочисленное деление в JavaScript. Оператор деления в JavaScript ( / ) делит два числа ( делимое и делитель ) и возвращает частное в виде числа с плавающей запятой (а не частное и остаток от деления по отдельности).
Все числа в JavaScript (кроме чисел BigInt) имеют тип Число , представляющее числа с плавающей запятой, такие как 25 , 12,25 и -3,45 .
Например, вывод следующего выражения: 1,5 :
пусть результат = 9 / 6 // вывод: 1,5
Но если нужно найти частное от деления без запятой и дробной части, то нужно его округлить.
Посмотрим как.
Округление частного в целочисленном делении JS
Один из способов избавиться от дроби — преобразовать число с плавающей запятой в целое — с помощью функций Math.floor() и Math.ceil().
Функция Math.floor() всегда округляет в меньшую сторону и возвращает наибольшее целое число, меньшее (или равное) заданному числу. Например, 1,5 станет 1 .
пусть результат = Math.floor (9 / 6) // вывод: 1
👇 Продолжить чтение
Однако есть ограничение; Этот подход работает только с положительными коэффициентами. Если дивиденд отрицательный, вы можете получить неожиданные результаты:
пусть результат = Math.floor (-9 / 6) // вывод: -2 (наибольшее целое *меньше* -1,5) // ожидаемый результат: -1
Причина в том, что Math.floor() округляет до первого целого числа меньше -1.5 , а так как это отрицательное число, то первое целое число меньше -1. равно
5 -2 . Очевидно, это не то, чего мы хотим.
В качестве обходного пути можно использовать Math.ceil() для отрицательных частных.
В отличие от Math.floor() , функция Math.ceil() всегда округляет в большую сторону и возвращает меньшее целое число, большее или равное заданному числу.
Давайте создадим простую функцию и попробуем ее с разными параметрами:
функция intDivide (дивиденд, делитель) {
пусть частное = делимое / делитель
// Использовать Math.ceil, если частное отрицательное
если (частное < 0) {
вернуть Math.ceil(частное)
}
вернуть Math.floor (частное)
}
intDivide (9, 6) // выход 1
intDivide(-9, 6) // вывод -1
Как насчет
Math.trunc() ? Math.trunc() обрезает десятичную точку и дробную часть независимо от того, является ли данное число положительным или отрицательным.
Вот тест с некоторыми числами с плавающей запятой:
Math.trunc(-1.5) // -1 Math.trunc(-0.5) // -0 Math.trunc(-0) // -0 Math.trunc(0) // 0 Math.trunc(0.75) // 0 Math.trunc(25.65) // 25
Звучит как хорошая альтернатива первому подходу.
👇 Продолжить чтение
Возможно, вы захотите использовать parseInt() для преобразования частного (в числах с плавающей запятой) в целое число. Однако использование функции parseInt для усечения больших или малых чисел может привести к неожиданным результатам, поскольку эти числа часто содержат символ "e" в строковом представлении (например, 6,022e23 для 6,022 × 10 23 ).
Бонус Совет : Вы также можете добавить запятые к значению частного, чтобы сделать его более читаемым, если вы имеете дело с большими числами.
Использование побитового оператора
~~ для усечения чисел Побитовые операторы в JavaScript преобразуют свой операнд в 32-битное целое число. Некоторые разработчики используют оператор ~~ как «более быструю» альтернативу функциям округления.

ceil(min)
max = Math.floor(max)
return Math.floor(Math.random() * (max - min) + min)
}
5) == -3
Js.Math.unsafe_round(2_150_000_000_000.3) // вне диапазона для int
trunc(-1.5) // -1
Math.trunc(-0.5) // -0
Math.trunc(-0) // -0
Math.trunc(0) // 0
Math.trunc(0.75) // 0
Math.trunc(25.65) // 25