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
  

Гиперболический арктангенс (в радианах) аргумента; возвращает

NaN , если аргумент находится за пределами диапазона [-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

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