Как сделать число отрицательным js

Добавил пользователь Евгений Кузнецов
Обновлено: 18.09.2024

Мы можем преобразовать отрицательное число в положительное в javascript методами, описанными ниже.

Метод 1: это общий метод, в котором мы сначала проверяем, положительное или отрицательное число уже, если число отрицательное, то мы умножаем число на -1, чтобы сделать его положительным.

Синтаксис:

Пример: Ниже представлена реализация описанного выше подхода:

Метод 2: В этом методе мы будем использовать функцию Math.abs () для преобразования отрицательного числа в положительное.

Синтаксис:

Пример: Ниже представлена реализация описанного выше подхода:

Функция isFinite позволяет проверить, является ли аргумент конечным числом.

В качестве ответа данная функция возвращает false , если аргумент является Infinity , -Infinity , NaN или будет быть приведён к одному из этих специальных числовых значений. В противном случае данная функция вернёт значение true .

Кроме глобальной функции isFinite в JavaScript имеется ещё метод Number.isFinite . Он в отличие от isFinite не осуществляет принудительное приведения аргумента к числу.

Функция isNaN

Функция isNaN предназначена для определения того, является ли аргумент числом или может ли быть преобразован к нему. Если это так, то функция isNaN возвращает false. В противном случае она возвращает true.

Если это действие нужно выполнить без приведения типа, то используйте метод Number.isNaN . Данный метод был введён в язык, начиная с ECMAScript 6.

Как явно преобразовать строку в число

Явно привести строку в число можно посредством следующих способов:

1. Использовать унарный оператор + , который необходимо поместить перед значением.

Этот способ пренебрегает пробелами в начале и конце строки, а также \n (переводом строки).

Используя данный способ необходимо обратить внимание на то, что пустая строка или строка, состоящая из пробелов и \n , переводится в число 0. Кроме этого она также преобразует тип данных null и логические значения к числу.

2. Функция parseInt . Данная функция предназначена для преобразования аргумента в целое число . В отличие от использования унарного оператора + , данный метод позволяет преобразовать строку в число, в которой не все символы являются цифровыми . Начинает она преобразовывать строку, начиная с первого символа. И как только она встречает символ, не являющийся цифровым, данная функция останавливает свою работу и возвращает полученное число.

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

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

Кроме функции parseInt в JavaScript имеется метод Number.parseInt . Данный метод ничем не отличается от функции parseInt и был введён в JavaScript со спецификацией ECMASCRIPT 2015 (6).

3. Функция parseFloat . Функция parseFloat аналогична parseInt , за исключением того что позволяет выполнить преобразование аргумента в дробное число.

Кроме этого функция parseFloat в отличие от parseInt не имеет 2 аргумента, и следовательно она всегда пытается рассмотреть строку как число в десятичной системе счисления.

Кроме функции parseFloat в JavaScript имеется метод Number.parseFloat . Данный метод ничем не отличается от функции parseFloat и был введён в JavaScript со спецификацией ECMASCRIPT 2015 (6).

Преобразование числа в строку

Превратить число в строку можно с помощью метода toString .

Метод toString позволяет также указать основание системы счисления с учётом которой необходимо явно привести число к строке:

Как проверить является ли переменная числом

Определить является ли значение переменной числом можно используя один из следующих способов:

1. С использованием функций isNaN и isFinite:

Этот способ позволяет определить является ли указанное значение числом или может быть приведено к нему. Данный вариант не считает числом пустую строку, строку из пробелов, значение null , Infinity , -Infinity , true и false .

2. С использованием оператора typeof и функций isFinite, isNaN:

Эта функция определяет имеет ли указанное значение тип Number, а также не принадлежит ли оно к одному из специальных значений Infinity, -Infinity и NaN. Эсли это так, то данная функция возвращает значение true.

3. С помощью метода ECMAScript 6 Number.isInteger(value) . Данный метод позволяет определить, является ли указанное значение целым числом.

Чётные и нечётные числа

Проверить является ли число чётным или нечётным можно посредством следующих функций:

Но перед тем как проводить такую проверку желательно убедиться что указанное значение является числом:

Простые числа в Javascript

Рассмотрим пример в котором выведем с помощью Javascript простые числа от 2 до 100.

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

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

1. Используя специально предназначенные для этого методы Math.floor , Math.ceil и Math.round . Метод Math.floor округляет дробное число до ближайшего целого вниз, т.е. попросту отбрасывает дробную часть. Math.ceil скругляет дробное число до ближайшего целого вверх. Math.round округляет число вверх или вниз в зависимости от значения дробной части. Если дробная часть больше или равно 0.5, то вверх, иначе скруление осуществляется вниз.

2. С помощью метода toFixed(точность) . Данный метод округляет дробную часть числа до заданной точности. Результат округления возвращает в виде строки.

Если знаков после запятой для формирования указанной точности числа не хватает, то оно дополняется нулями.

3. Посредством метода toPrecision(точность) . Данный метод представляет число с указанной точностью. При этом он может округлить не только дробную, но и целую часть числа. Полученное число данный метод может представить в зависимости от результата с фиксированной запятой или в экспоненциальной форме.

4. Используя логические операторы НЕ или ИЛИ.

Целая и дробная часть числа

Получить целую часть числа можно используя метод Math.floor() и parseInt() :

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

Кроме этого дробную часть можно получить также с помощью вычислений:

Делится ли число нацело

Определить делится ли число нацело можно используя оператор процента:

Форматирование чисел

В JavaScript отформатировать вывод числа в соответствии с региональными стандартами (языковыми настройками операционной системы) позволяет метод toLocaleString() .

Например, выполним форматирование числа в соответствии с региональными стандартами, которые установлены в системе по умолчанию:

Например, выполним форматирование числа в соответствии с региональными стандартами России (ru):

Данный метод можно также использовать для форматирования числа в виде валюты:

Представление числа в виде процентов:

Разбить число на разряды (свойство useGrouping ):

Вывести с число с определённым количеством цифр (2) после запятой:

Сравнение чисел

Для сравнения чисел в JavaScript используются следующие операторы: == (равно), != (не равно), > (больше), (меньше), >= (больше или равно), (меньше или равно).

Например, сравним два числа:

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

Например, в JavaScript сумма чисел (0.2 + 0.4) не равна 0.6:

Погрешности происходят потому что все вычисления компьютер или другое электронное устройство производит в 2 системе счисления. Т.е. перед тем как выполнить какие-то действия компьютер сначала должен преобразовать представленные в выражении числа в 2 систему счисления. Но, не любое дробное десятичное число можно представить в 2 системе счисления точно.

Например, число 0.2510 в двоичную систему преобразуется точно.

Например, число 0.210 можно преобразовать в 2 систему только с определённой точностью:

В результате эти погрешности скажутся при вычисления суммы двух чисел и результатах сравнения. Т.е. получится что на самом деле JavaScript будет видет эту запись следующим образом:

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

Например, сравнить числа до 2 знаков после запятой используя методы toFixed() и toPrecision() :

Основные математические операции

В JavaScript существуют следующие математические операторы: + (сложение), - (вычитание), * (умножение), / (деление), % (остаток от деления), ++ (увелить значение на 1), -- (уменьшить значение на 1).

Кроме этого в JavaScript есть комбинированные операторы: x+=y ( x=x+y ), x-=y ( x=x-y ), x*=y ( x=x*y ), x/=y ( x=x/y ), x%=y ( x=x%y ).

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

String

У объекта String есть один статический метод, String.fromCharCode() , который обычно используют для создания строкового представления последовательности Unicode символов. В этом примере мы делаем простую строку с использованием ASCII кодов:

Вы также можете использовать восьмеричные и шестнадцатеричные числа:

Все другие, описанные ниже методы, это методы “из коробки”, которые работают на строках.

charAt()

Отдаёт символ под заданным индексом i .

Если вы зададите индекс, который не подходит по строке, то на выходе вы получите уже пустую строку.

В JavaScript нет типа char, так что char это строка с длиной 1 .

charCodeAt()

Отдаёт код символа под индексом i . Как и с charAt() , отдаёт Unicode 16-битное целое число, представляющее символ:

Вызов toString() после него, отдаст шестнадцатеричное число, которое вы можете найти в любой Unicode таблице, такой как эта.

codePointAt()

Этот метод был представлен уже в ES2015, чтобы работать с Unicode символами, которые не могут быть представлены как единичная 16-ти битная Unicode единица и которым вместо этого нужно их две.

Используя charCodeAt() , вам надо получить первый и второй, и затем совместить их. Используя codePointAt() вы получаете весь символ в одном запросе.

К примеру, этот китайский символ “𠮷” состоит из двух UTF-16 частей:

Комбинируем эти два unicode символа:

Вы можете получить тот же результат, но только используя codePointAt() :

Если вы создаете новый символ, комбинируя эти unicode символы:

concat()

Объединяет актуальную строку со строкой str .

Вы можете указывать сколько угодно аргументов и в таком случае, все эти аргументы будут объединены в строку.

endsWith()

Проверяет заканчивается ли строка со значением другой строки str .

Вы можете передать второй параметр с целым числом и endWith() будет рассматривать оригинальную строку, как если бы она этой заданной длины:

includes()

Проверяет есть ли в строке значение строки str .

includes() также принимает второй опциональный параметр, целое число, которое указывает на позицию с которой начинать поиск.

indexOf()

Даёт позицию начала заданной строки str в строке, на которой применяется метод.

Вы можете передать второй параметр, чтобы указать точку старта:

lastIndexOf()

Даёт позицию последнего появления строки str в актуальной строке.

Отдаёт -1 , если поисковая строка не найдена.

localeCompare()

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

Язык определяется настоящим местоположением или вы можете указать его, как второй аргумент:

Очень часто его используют для сортировки массивов:

Где бы вы обычно использовали:

Только тут мы можем это сделать с помощью localeCompare(), который позволит нам работать с алфавитами по всему миру.

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

match()

А вот работа с регулярными выражениями RegEx.

normalize()

В Unicode есть четыре главные формы нормализации. Их коды это NFC , NFD , NFKC и NFKD . На Википедии есть хорошая статья про это.

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

Вот пример с MDN:

padEnd()

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

padEnd() был представлен в ES2017, как метод добавляющий символы в конец строки.


Смысл этого метода в том, чтобы добавлять строки или символы как в предыдущем методе, но уже с самого начала строки:


repeat()

Этот метод был представлен в ES2015 и повторяет строки заданное количество раз:

Отдает пустую строку, если параметр не указан или параметр равен нулю. А в случае с отрицательным числом вы получите RangeError.

replace()

Этот метод находит первое упоминание str1 в заданной строке и заменяет его на str2 .

Отдаёт новую строку, не трогая оригинальную.

Вы можете передать регулярное выражение как первый аргумент:

replace() заменяет только первое упоминание, но а если вы будете использовать regex как поиск строки, то вы можете использовать ( /g ):

Второй параметр может быть функцией. Эта функция будет вызвана с заданным количеством аргументов, когда найдётся совпадение (или каждое совпадение в случае с regex /g ):

  • Нужная строка
  • Целое число, которое указывает позицию в строке, где произошло совпадение
  • Строка

Отдающееся значение функции заменит совпадающую часть строки.

Это работает и для обычных строк, а не только для регулярок:

В случае c regex, когда выбираются группы, все эти значения будут переданы как аргументы прямо после параметра совпадения.

search()

Отдаёт расположение первого совпадения строки str в заданной строке.

Этот метод отдаёт индекс начала упоминания или -1 , если такого не было найдено.

Вы можете использовать регулярные выражения (и на самом деле, даже если вы передаёте строку, то внутренне оно тоже применяется как регулярное выражение).

Отдает новую строку, которая является частью строки на которой применялся метод, от позиций begin до end .

Оригинальная строка не изменяется.

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

split()

Этот метод вырезает строку при её нахождении в строке на которой применяется метод (чувствительный к регистру) и отдаёт массив с токенами.

startsWith()

Проверяет начинается ли строка со значения str .

Вы можете вызвать startWith() на любой строке, указать подстроку и проверить отдаёт результат true или false .

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

toLocaleLowerCase()

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

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

Как и всегда, мы можем не осознавать все преимущества интернационализации, но я читал на MDN, что правила разметки текста в турецком языке отличаются от других языков, чьё описание основано на латинице.

В общем, это как и toLowerCase() , но с учетом локали.

toLocaleUpperCase()

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

Первым параметром указывается локаль, но это опционально, как и в случае с методом выше:

toLowerCase()

Этот метод отдаёт новую строку с текстом в нижнем регистре.

Не изменяет изначальную строку.

Не принимает параметры.

Работает как и toLocaleLowerCase() , но не учитывает локали.

toString()

Отдает строку из заданного строчного объекта.

toUpperCase()

Отдаёт новую строку с текстом в верхнем регистре.

Не изменяет оригинальную строку.

Не принимает параметры.

Если вы передадите пустую строку, то он возвратит пустую строку.

Метод похож на toLocaleUpperCase() , но не принимает параметры.

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

trimEnd()

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

trimStart()

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

valueOf()

Отдает строчное представление заданного строчного объекта:

Это тоже самое, что и toString()

Теперь пройдемся по числовым методам.

isInteger()

Отдаст true , если переданное значение является целым числом. Всё иное, такое как, логические значения, строки, объекты, массивы, отдают false .

isNaN()

NaN это особый случай. Число является NaN , только если оно NaN или если это выражения деления ноль на ноль, что отдаёт NaN . Во всех других случаях мы можем передать ему что захотим, но получим false :

isSafeInteger()

Число может удовлетворять Number.isInteger() , но не Number.isSafeInteger() , если оно заходит за пределы безопасных целых чисел.

Так что, всё что выше 2⁵³ и ниже -2⁵³ не является безопасным.

parseFloat()

Парсит аргумент как дробное число и отдаёт его. Аргумент при этом является строкой:

Как вы видите Number.parseFloat() довольно гибок. Он также может конвертировать строки со словами, выделяя только первое число, но в этом случае строка должна начинаться с числа:

parseInt()

Парсит аргумент как целое число и отдаёт его:

Как вы видите Number.parseInt() тоже гибок. Он также может конвертировать строки со словами, выделяя первое число, строка должна начинаться с числа.

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

Есть ли в JavaScript математическая функция, преобразующая числа в положительные значения?


Вы могли бы использовать это .


@omgaz Они не такие . var x = -100; ~x+1 === 100 но var x = 100; ~x+1 === -100 . Math.abs всегда делает его положительным, в то время как добавление единиц просто меняет знак.

О чем x *= -1 ? Мне нравится его простота.

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

Понял. Моя интерпретация вашего комментария была в контексте переворачивания числа, а не x всегда положительного. Мои извинения, @myusuf.

просто напомните, что это решение не применяется для чисел с плавающей запятой, оно получает только десятичную часть

Math.abs(x) или , если вы уверены , значение отрицательное перед преобразованием только предварять регулярный знак минус: x = -x .

Знак минус (-) может преобразовывать положительные числа в отрицательные числа и отрицательные числа в положительные числа. x=-y визуальный сахар для x=(y*-1) .

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

Превратите любое число в положительное

Превратите любое число в отрицательное

Инвертировать любое число



Мне это решение легко понять.

Если вы хотите написать интересный код, который никто не сможет обновить, попробуйте следующее:

Кайл, ~ оператор преобразует число в 32-битное целое число. Если у вас есть поплавок в качестве входных данных, он будет обработан.

Умножение на (-1) - самый быстрый способ преобразовать отрицательное число в положительное. Но вы должны быть осторожны, чтобы не превратить мою ошибку из положительного числа в отрицательное! Так что нужна дополнительная проверка .

Затем Math.abs, Math.floor и parseInt самые медленные.

введите описание изображения здесь


Некоторые из нас забывают, насколько полезной может быть базовая математика в таких случаях. Спасибо, что напомнили мне о такой простоте.

От отрицательного к положительному

Положительный на отрицательный


Я вижу, что вы хотите показать, но то, как вы это выразили, сбивает с толку. Может быть, вам следует указать: для положительного: использовать abs, для отрицательного: abs (x) * -1. Таким образом, вы не подразумеваете, что такое бывший знак X.

Я сам делал что-то подобное.

Он проверяет, является ли число отрицательным, и если это так, умножается на -1. Это действительно возвращает значение, это зависит от вас, если вы его захватите. Если вы хотите назначить его чему-то, вам, вероятно, следует сделать что-то вроде:

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

Я видел здесь побитовое решение и тоже хотел прокомментировать его.

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

Проще говоря, мы берем отрицательное число, убираем из него единицу, а затем поразрядно инвертируем его. Если бы мы произвели побитовое инвертирование, обычно мы получили бы слишком маленькое значение на 1. Вы также можете сделать это:

Это сделает то же самое, но сначала инвертирует, а затем прибавит 1 к положительному числу. Хотя вы НЕ МОЖЕТЕ сделать это:

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

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