Math random javascript

Генерация случайных чисел в javascript.

В javascript часто требуется сгенерировать случайное число. Например, чтобы нарисовать звезду в ночном небе или анимировать хаотические аттракторы. Однако существуют различные способы генерации, и от приложения зависит, какой вы будете использовать.

Базовая генерация

Самый простой способ получить случайное число — это метод Math.random(), встроенный в javascript.

Math.random() всегда возвращает число с плавающей точкой между 0 и 1.

Технически, число, которое вы получите, может быть 0, но никогда не будет точно 1.

Посколько это используется достаточно часто, Math.random() помещают внутрь функции

Проблема, конечно, заключается в том, что функция всегда будет создавать случайное число в пределах очень ограниченного диапазона. Большинство других рецептов на этой странице предназначены для того, чтобы решить эту проблему.

Генерация между числами: минимальные и максимальные значения

Чтобы добавить эту функциональность, нам потребуется немного математики.

FLOATING POINT

INTEGER

Случайное целое число в диапазоне, включая минимальное и максимальное.

Подбрасывание монеты(случайное true или false)

Если вам нужно получить просто 0 или 1, то используйте следующий код:

Если нужно конкретно true или false

Если вам нужно ассоциировать любые слова со сторонами монеты

Генерация с исключениями

Для ограниченного диапазона целых чисел: создайте массив чисел, которые вы бы хотели вырисовывать, и выберите из него случайное.

Для чего-нибудь более динамичного: добавьте массив целых чисел, которые вы хотите исключить, и пустой массив, который будет содержать результат фильтрации первого массива во второй.

Затем создайте цикл по массиву numPool, проверьте, есть ли случайное число в массиве исключений excludePool, и поместите результат в массив filteredPool:

Наконец, отобразите случайное число из отфильтрованного массива

Генерация случайного, неповторяющегося числа

Для небольших наборов чисел: создайте массив, заполненный элементами, перетасуйте их случайным образом, поместите результат в новый массив, затем достаньте перетасованные элементы один раз:

Для более больших наборов чисел: создайте и заполните массив случайными целыми числами, отклоняя любое, которое уже было ранее сгенерировано:

В коде выше numReserve заполнен 12 случайными числами между 0 и 1000. Числа затем могут быть получены из массива.

Криптография

Всех показанных выше методов будет недостаточно для создания криптографически защищенных функций. Для этого мы можем использовать Web Cryptography API, создав типизированный массив:

В этом случае мы создаем массив с 8 различными слотами, каждый из которых может содержать 16-битовое целое число без знака. Другие опции включают Int8Array, Uint8Array, int16Array, Int32Array и Uint32Array.

Теперь заполните массив случайными числами определенного типа

Показаны выбранные значения в консоли:

Web Cryptography API имеет хорошую поддержку в современных браузерах, хотя в некоторых нужно ставить префиксы.

Оригинал: http://thenewcode.com/82/Recipes-for-Randomness-in-JavaScript

  • Создано 07.12.2015 22:36:06

  • Михаил Русаков

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так:

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Math.random()

Поддержка браузерами

Описание

Метод Math.random() возвращает псевдослучайное число между 0 и 1.

Псевдослучайное число создаётся в диапазоне от 0 (включительно) до 1 (исключительно), то есть возвращаемое число может быть нулём, но всегда будет меньше единицы.

Для округления числа с плавающей точкой до целого можно воспользоваться к примеру методом Math.floor().

Синтаксис

Math.random()

Возвращаемое значение

  • Число с плавающей точкой в диапазоне от 0 (включительно) до 1 (исключительно).

Метод Math.random() в основном используют для генерации псевдо-случайного числа в определённом диапазоне. Например, нам надо получить число в диапазоне от 50 до 100 (включительно). Для этого нам придётся написать следующий код:

document.write(Math.floor(Math.random() * 51 + 50));

Рассмотрим подробно как работает наш пример и почему используется именно такая форма записи. Первым делом нам надо указать минимальное получаемое значение из нужного диапазона, в нашем примере это число 50.

Math.random()

Теперь нам нужно каким-то образом получить случайное число, которое при сложении с числом 50 не будет превышать в сумме число 100. Как мы знаем из математики, нахождение неизвестного слагаемого делается путём вычитания из суммы известного слагаемого. 100 — 50: получаем разность 50. Теперь для проверки, подходит нам это число или нет, умножим его на возможное минимальное и максимальное число возвращаемое методом Math.random(). Умножаем минимальное 0.004704564176082244 * 50 = 0.2… и максимальное 0.9999999999746223 * 50 = 49.9… И так мы видим, что при умножении разности на максимально возможное случайное число в результате даёт нам целую часть числа на единицу меньше, чем нужно. Чтобы исправить ситуацию, нам нужно всего лишь прибавить одну единицу к 50, т.е. 50 + 1 = 51, теперь если полученное число умножить на максимально возможно число возвращаемое методом у нас будет выходить число 50.9… — это то, что нам надо, после сложения чисел 50.9 + 50, получаем 100.9. Для округления числа до целого используем метод Math.floor(). Таким образом, формула для получения нужного числа выглядит следующим образом: max — min + 1. Перепишем приведённый выше пример:

var max = 100, min = 50; document.write(Math.floor(Math.random() * (max — min + 1) + min));

Эта формула особенно полезна, когда заранее неизвестно в каком диапазоне необходимо получить случайное число.

Пример

<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>Название документа</title> </head> <body> <p>Псевдослучайное число в диапазоне от 1 до 10.</p> <div id=»test»></div> <script> var x; for(var i = 0; i < 10; i++) { x = document.getElementById(‘test’); x.innerHTML += Math.floor(Math.random() * 10 + 1) + ‘<br>’; } </script> </body> </html> Попробовать »

JavaScript: Математические операторы

Оператор Тип оператора А О Типы значений
… + …
… — …
… * …
… / …
… % …
… ** …
Сложение
Вычитание
Умножение
Деление
Деление с остатком
Возведение в степень
слева направо
слева направо
слева направо
слева направо
слева направо
справа налево
2
2
2
2
2
2
число, число → число
число, число → число
число, число → число
число, число → число
число, число → число
число, число → число

Операторы: (вычитание), (сложение), (умножение) и (деление) работают точно так же, как и арифметические действия в математике.

Генерация случайных чисел в javascript.

Оператор (деление с остатком) возвращает остаток от деления первого операнда на второй. Результат деления с остатком будет иметь тот же знак, что и первый операнд:

alert(10 + 2); // 12 alert(10 — 2); // 8 alert(10 * 2); // 20 alert(10 / 2); // 5 alert(5 % 2); // 1 alert(-5 % 2); // -1

Оператор (возведение в степень) имеет два операнда. Первый операнд является основанием степени, второй операнд – показателем степени, в результате оператор возвращает основание, возведённое в указанную степень:

2 ** 4; // 16

Все математические операторы преобразуют операнды по тем же правилам, что и функция Number().

Унарные + (плюс) и — (минус)

Оператор Тип оператора А О Типы значений
— …
+ …
Унарный минус
Унарный плюс
справа налево
справа налево
1
1
число → число
число → число

Оператор (унарный плюс) преобразует значение своего операнда в число и возвращает преобразованное значение. При использовании с числовым операндом он не выполняет никаких действий:

var x = +»5″;

Оператор (унарный минус) преобразует значение своего операнда в число, если это необходимо, и затем делает число отрицательным:

var x = -5 + 3;

Унарные плюс и минус преобразуют операнды по тем же правилам, что и функция Number().

Инкремент и декремент

Оператор Тип оператора А О Типы значений
… ++
… —
++ …
— …
Постфиксный инкремент
Постфиксный декремент
Префиксный инкремент
Префиксный декремент
отсутствует
отсутствует
справа налево
справа налево
1
1
1
1
lval → число
lval → число
lval → число
lval → число

Оператор (инкремент) увеличивает значение своего операнда на единицу. Если значение операнда не является числом, оператор автоматически преобразует его в число, увеличивает на единицу и возвращает результат, который присваивается обратно операнду.

Инкремент имеет две формы – постфиксную (оператор ставится после операнда) и префиксную (оператор ставится перед операндом). Если он используется в постфиксной форме, то сначала возвращается исходное значение операнда, и только затем значение операнда увеличивается на единицу:

var x = 5; alert(x++); // 5 alert(x); // 6 Попробовать »

В префиксной форме оператор инкремент сразу увеличивает значение своего операнда на единицу:

var x = 5; alert(++x); // 6 Попробовать »

Оператор (декремент) работает аналогично оператору инкремент, но не увеличивает значение своего операнда, а наоборот, уменьшает его на единицу:

var x = 5; alert(—x); // 4 Попробовать »

Инкремент и декремент преобразуют операнды по тем же правилам, что и функция Number().

Главная » Javascript » Metody-i-svojstva-v-javascript-chisla

Методы и свойства в JavaScript (числа)

Прежде чем рассматривать новый урок, давайте сначала разберёмся с самим понятиями метода и свойства.

Функция Math.random (JavaScript)

Очень часто новички не могут разобраться в чём разница между этими терминами. Постараюсь ответить своими словами на этот вопрос:


Методы оказывают какое-либо воздействие на переменную, а свойства не оказывают. Но свойства объекта(переменной) можно менять отдельно.


Так вот в JavaScript существуют встроенные функции, которые в свою очередь и являются методами и свойствами. В этом уроке мы и постараемся их рассмотреть. Под переменными мы будем рассматривать числа и строки.

isFinite(n)

Первая функция с которой вы познакомитесь: isFinite(n). Она преобразует аргумент к числу (если это число), кроме значений NaN/Infinity/-Infinity и возвращает логическое значение.

Но здесь надо понимать, что Infinity/-Infinity это числа.

parseInt и parseFloat — мягкое преобразование

Помните мы уже преобразовывали строку с помощью унарного плюса к числу:

Но что делать если мы хотим преобразовать в число например вот такое выражение 72pt или выделить дробное число из такой строчки 34.67.56. Для этого придумали так называемое мягкое преобразование с использованием функций parseInt — для целых чисел и parseFloat — для дробных:

Эти функции считывают числа по порядку, пока не вылезет ошибка, но и здесь есть свои подводные камни, например при преобразовании parseInt(«pt72») выведется значение NaN.

isNaN

Значение NaN (Not-a-Number) можно проверить с помощью функции isNaN, а делается это всё очень просто:

Проверяет число это или нет и возвращает логическое значение true/false. Вообще значение NaN обозначает, что операция не может быть завершена.

toString

Для преобразования в различные системы исчислений используют метод toString:

Здесь я думаю понятно, присвоили переменной число в 10-ой системе и с помощью функции toString вывели его же в 2-ой системе. Основание toString может быть от 2 до 36. Кстати вы можете задавать числа в 16-ой системе сразу:

Округление чисел в JavaScript

В Javascript есть целых три функции округления: Math.floor, Math.ceil, Math.round округляют вниз, вверх и до ближайшего целого соответственно:

Многие наверное заметили, что последняя строчка делает округление дробного числа 3-его знака после запятой, таким способом можно округлять числа до нужного вам знака.

Метод toFixed(precision)

Этод метод также округляет число с точность до определенного знака, но выдаёт округлённое число в виде строки. А как перевести строчку в число вы уже знаете:

Интересным является тот факт, что метод toFixed не является эквивалентным Math.round. Кроме тех методов и свойств, которые были описаны выше в JavaScript есть и другие функции, связанные с тригонометрией и вычислениями такие, как Math.asin(x), Math.sin(x), Math.sqrt(x) и т.п.

Метод Описание
Math.acos(x) Возвращает значение арккосинуса x в радианах
Math.asin(x) Возвращает значение арксинуса x в радианах
Math.atan(x) Возвращает значение арктангенса x в радианах
Math.atan2(y, x) Возвращает значение угла до точки (y, x)
Math.sin(x) Вычисляет значение синуса x в радианах
Math.cos(x) Вычисляет значение косинуса x в радианах
Math.tan(x) Вычисляет значение тангенса x в радианах
Math.sqrt(x) Вычисляет квадратный корень из числа x
Math.log(x) Возвращает натуральный логарифм x
Math.pow(x, n) Возводит число в степень
Math.abs(x) Возвращает абсолютное значение числа
Math.exp(x) Возводит экспоненту в степень
Math.max(a, b, c…) Возвращает наибольшее число из списка аргументов
Math.min(a, b, c…) Возвращает наименьшее число из списка аргументов
Math.random() Возвращает случайное число в интервале [0,1)

NFE — именованные функциональные выражения

Методы и свойства в JavaScript (строки)



Math.random

Функция parseFloat (JavaScript)parseFloat Function (JavaScript)

  • Время чтения: 2 мин
  • Соавторы

Преобразует строку в число с плавающей запятой.Converts a string to a floating-point number.

СинтаксисSyntax

Необходимая аргументом является строка, содержащая число с плавающей запятой.The required argument is a string that contains a floating-point number.

Функция возвращает числовое значение, равное числу, содержащемуся в .The function returns a numerical value equal to the number contained in .Если префикс не успешно проанализировать число с плавающей запятой, возвращается (не число).If no prefix of can be successfully parsed into a floating-point number, (not a number) is returned.

Можно проверить с помощью функции.You can test for using the function.

ТребованияRequirements

Поддерживается в следующих режимах документов: случайный режим, стандартный режим Internet Explorer 6, стандартный режим Internet Explorer 7, стандартный режим Internet Explorer 8, стандартный режим Internet Explorer 9, стандартный режим Internet Explorer 10, стандартный режим Internet Explorer 11.Supported in the following document modes: Quirks, Internet Explorer 6 standards, Internet Explorer 7 standards, Internet Explorer 8 standards, Internet Explorer 9 standards, Internet Explorer 10 standards, Internet Explorer 11 standards.Также поддерживается в приложениях Магазина (Windows 8 и Windows Phone 8.1).Also supported in Store apps (Windows 8 and Windows Phone 8.1).См. Сведения о версии.See Version Information.

Применяется к: глобального объектаApplies To: Global Object

См. такжеSee Also

Функция isNaNisNaN Function
Функция parseIntparseInt Function
Объект StringString Object

JavaScript Random


Все версии 7.x 8.x ОП 8.2 УП 8.3 УП Видео   Добавить FAQ

Работа с Числами Версия
Ввести число, ввод числа [7.x, 8.x]
Как вывести прописью число килограммов с указанием дробной части в граммах? [8.x]
Как вывести число прописью по-русски, но без дробной части? [8.x, 8.2 УП]
Как вывести число прописью по-русски, с указанием сотых в дробной части? [8.x, 8.2 УП]
Как дополнить число лидирующими нулями (000851) ? [8.x]
Как извлечь корень квадратный из числа [7.x, 8.x]
Как проверить целое число? Четное число? [7.x, 8.x, 8.2 УП]
Перевод из Десятичного в Двоичное и обратно [8.x, 8.3]
Функции — Экспонента, Степень, Логарифм, Синус, Косинус, Тангенс [7.x, 8.x, 8.2 УП]
Функция безопасного деления чисел, избежание ошибки деления на 0. [8.x]
Функция возведения числа в степень, в дробную степень [7.x, 8.x]
Функция возвращает копейки [8.x]
Функция возвращает модуль аргумента — Abs() [8.x, 8.2 УП]
Функция возвращает сумму без скидки [8.x]
Функция выполняет пропорциональное распределение суммы в соответствии с заданными коэффициентами [8.x]
Функция Количество Прописью [8.x, 8.2 УП]
Функция переводит Десятичное число в Шестнадцатеричное и обратно [8.x, 8.2 УП]
Функция преобразует переданную сумму в строку вида 123 руб. 45 коп [7.x, 8.x]
Функция преобразует переданную сумму, число в строку вида [7.x, 8.x]
Функция преобразует числа с разделителями 1 256 735 в 1256735 [8.x]
Функция проверяет наличие в строке только цифр [8.x, 8.2 УП, 8.3]
Число Прописью, подробное Описание [8.x, 8.2 УП]

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *