Как сделать модуль числа в js

Обновлено: 07.07.2024

По данным Калькулятор Google (-13) % 64 is 51 .

В соответствии с Javascript (см. Это JSBin) является -13 .

используя Number.prototype медленно, потому что каждый раз, когда вы используете метод прототипа, ваш номер завернут в Object . Вместо этого:

~97% более быстро чем используя прототип. Конечно, если для вас важна производительность..

на % оператор в JavaScript является оператором остатка, а не оператором по модулю (основное различие заключается в том, как обрабатываются отрицательные числа):

в любом случае вот учебник С функцией " mod " для возврата положительного результата.

принятый ответ заставляет меня немного нервничать, потому что он повторно использует оператор%. Что делать, если Javascript изменит поведение в будущем?

вот обходной путь, который не использует%:

хотя он ведет себя не так, как вы ожидали, это не означает, что JavaScript не "ведет себя". Это выбор JavaScript, сделанный для его вычисления по модулю. Потому что, по определению, любой ответ имеет смысл.

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

если x - целое число, а n сила 2, Вы можете использовать x & (n - 1) вместо x % n .

таким образом, кажется, что если вы пытаетесь мод вокруг градусов (так что если у вас есть -50 градусов-200 градусов), вы хотели бы использовать что-то вроде:

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

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

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

иногда ситуации осложняются ложно рекламируемыми или понятыми функциями или операторами фреймворка. Эта статья посвящена оператору по модулю.

на первый взгляд подписанный оператор остатка функционирует аналогично оператору по модулю. Давайте проведем несколько тестов, сравнив результаты, возвращенные JavaScript, с результатами, возвращенными Google.

в Chrome, откройте консоль (нажмите клавишу " F12 "и выбрать вкладку "консоль"). Введите там, один за другим, вычисления из левого столбца. Затем введите те же выражения в строке поиска Google. Обратите внимание на результаты. Они должны быть одинаковыми.

теперь попробуем использовать отрицательное значение в качестве первый операнд:

enter image description here

-5 % 3 = 1 (согласно Google) -5 % 3 = -2 (согласно JavaScript)

однако не все языки программирования / фреймворки имеют одинаковую реализацию для %. Например, в Python оператор % вычисляет значение true по модулю так же, как и Google.

enter image description here

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

предположим, что нам нужно реализовать (научный) вычисления в JavaScript с помощью арифметики по модулю.

поскольку мы теперь понимаем, что JavaScript не имеет истинного оператора по модулю, мы можем легко реализовать нашу операцию по модулю как функцию.

существует несколько способов реализации по модулю в JavaScript. Я покажу вам 3 способа сделать это.

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

Примечание: есть много вычислений, которые используют арифметику по модулю. если вы хотите увидеть, как использовать эти новые функции по модулю в реализации кода Цезаря / ROT13, вы можете проверить это статьи.

В JavaScript, как и в других языках программирования, есть операции с числами. Рассмотрим самые популярные из них в этой статье.

Математические операции

Рассмотрим простейшие математические операции. Попробуем их на практике: Если вычисления слишком сложные, то можно выносить в переменные их части. К примеру:

В JavaScript деление на ноль безопасно и возвращает значение "Infinity" (плюс бесконечность), "-Infinity" (минус бесконечность) или "NaN" (нет значения, если делать ноль на ноль)

Обычно этого набора операций достаточно для создания интерактивных сайтов. Но порой приходится применять математические функции, которые доступны в встроенном глобальном объекте Math, предоставляющим константы и методы для математических вычислений:

Math.sqrt( X ) - получает квадратный корень числа X

Math.pow( X, Y ) - возводит число X в степень Y

Math.floor( X ) - округляет число X в меньшую сторону до целого

Math.ceil( X ) - округляет число X в большую сторону до целого

Math.abs( X ) - даёт модуль числа X.

Math.round( X ) - округляет число X до целого. Если дробная часть меньше или равна 0.5, то до большего целого. Иначе до меньшего.

Сокращения математических функций

Чтобы ускорить процесс разработки, в JavaScript были добавлены сокращения от популярных операций. Продемонстрируем их: Получается, что некоторые операции можно записать тремя разными способами. к примеру: Все эти три операции дадут один и тот же эффект - переменная a будет увеличена на 1.

JavaScript объект Math позволяет выполнять математические задачи с числами.

Пример

Math.round()

Math.round(x) возвращает значение x, округленное до ближайшего целого числа:

Пример

Math.pow()

Math.pow(x, y) возвращает значение x в степени y:

Пример

Math.sqrt()

Math.sqrt(x) возвращает квадратный корень из x:

Пример

Math.abs()

Math.abs(x) возвращает абсолютное (положительное) значение x:

Пример

Math.ceil()

Math.ceil(x) возвращает значение x, округленное вверх ближайшего целого числа:

Пример

Math.floor()

Math.floor(x) возвращает значение х округляется вниз до ближайшего целого числа:

Пример

Math.sin()

Math.sin(x) возвращает синус (значение от -1 до 1) угла x (в радианах).

Если вы хотите использовать градусы вместо радиан, вам нужно преобразовать градусы в радианы:

Угол в радианах = Угол в градусах x PI / 180.

Пример

Math.cos()

Math.cos(x) возвращает косинус (значение от -1 до 1) угла x (в радианах).

Если вы хотите использовать градусы вместо радиан, вам нужно преобразовать градусы в радианы:

Угол в радианах = Угол в градусах x PI / 180.

Пример

Math.min() и Math.max()

Math.min() и Math.max() может использоваться для поиска наименьшего или наибольшего значения в списке аргументов:

Пример

Пример

Math.random()

Math.random() возвращает случайное число от 0 (включительно) до 1 (исключая):

Пример

Вы узнаете больше об этом Math.random() в следующей главе этого руководства.

Математические свойства (константы)

JavaScript предоставляет 8 математических констант, к которым можно получить доступ с помощью объекта Math:

Пример

Math.E // возвращает число Эйлера
Math.PI // возвращает PI
Math.SQRT2 // возвращает квадратный корень из 2
Math.SQRT1_2 // возвращает квадратный корень из 1/2
Math.LN2 // возвращает натуральный логарифм 2
Math.LN10 // возвращает натуральный логарифм 10
Math.LOG2E // возвращает логарифм E по основанию 2
Math.LOG10E // возвращает логарифм E по основанию 10

Математический конструктор

В отличие от других глобальных объектов, объект Math не имеет конструктора. Методы и свойства статичны.

Все методы и свойства (константы) можно использовать без предварительного создания объекта Math.

Методы математических объектов

Метод Описание
abs(x) Возвращает абсолютное значение x
acos(x) Возвращает арккосинус x в радианах
acosh(x) Возвращает гиперболический арккосинус x
asin(x) Возвращает арксинус x в радианах
asinh(x) Возвращает гиперболический арксинус x
atan(x) Возвращает арктангенс x как числовое значение в диапазоне от -PI / 2 до PI / 2 радиан
atan2(y, x) Возвращает арктангенс частного своих аргументов.
atanh(x) Возвращает гиперболический арктангенс x
cbrt(x) Возвращает кубический корень из x
ceil(x) Возвращает x, округленное в большую сторону до ближайшего целого числа
cos(x) Возвращает косинус x (x в радианах).
cosh(x) Возвращает гиперболический косинус x
exp(x) Возвращает значение E x
floor(x) Возвращает x, округленное в меньшую сторону до ближайшего целого числа
log(x) Возвращает натуральный логарифм (основание E) числа x
max(x, y, z, . n) Возвращает число с наибольшим значением
min(x, y, z, . n) Возвращает число с наименьшим значением
pow(x, y) Возвращает значение x в степени y
random() Возвращает случайное число от 0 до 1
round(x) Округляет x до ближайшего целого числа
sin(x) Возвращает синус x (x в радианах)
sinh(x) Возвращает гиперболический синус x
sqrt(x) Возвращает квадратный корень из x
tan(x) Возвращает тангенс угла
tanh(x) Возвращает гиперболический тангенс числа
trunc(x) Возвращает целую часть числа (x)

Полный математический справочник

Для более полного ознакомления перейдите на Полный справочник математических объектов.

Что такое Math ? Технически — это объект, доступный из любого места программы, но перед тем, как говорить об объектах, нужно проделать очень большой путь. Сейчас достаточно запомнить, что функции для математических операций вызываются через Math. . Наличие этой приставки никак не влияет на понятие функции, которое мы рассмотрели ранее и будем рассматривать позже.

Полный список функций Math доступен в документации. О том, как её правильно читать, мы поговорим далее.

Задание

Сэм рассчитывал количество вражеских солдат, находящихся в башнях-близнецах, и случайно перепутал знаки операций. Его расчеты оказались верными, не считая того, что результат получился отрицательным. Помогите Сэму найти абсолютное значение числа бойцов. Выведите на экран абсолютное значение числа, находящегося в константе soldiersCount , используя функцию Math.abs(). Эта функция возвращает абсолютное значение переданного числа. Абсолютное значения числа — это само это число без знака перед ним.

Определения

Функция - операция, способная принимать данные и возвращать результат; функция вызывается так: foo() .

Аргумент - информация, которую функция получает при вызове. Например, foo(42) — передача аргумента 42 функции foo()

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

Читайте также: