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.0500001
863
гипот
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-битное целое число. Некоторые разработчики используют оператор ~~
как «более быструю» альтернативу функциям округления.