Есть ли в JavaScript математическая функция, которая преобразует числа в положительные значения?
javascript
Дейв
источник
источник
var x = -100; ~x+1 === 100
ноvar x = 100; ~x+1 === -100
.Math.abs
всегда делает его положительным, в то время как дополнение к ним просто инвертирует знак.Как насчет
x *= -1
? Мне нравится его простота.источник
x
будет перевернуто. Еслиx = 23
и запихнуть в это уравнение,x
тогда будет равно-23
. По словам г-на Эскаланте: «Положительное время отрицательное равно отрицательному. Отрицательное время отрицательное равно положительному». ... "Как мне добраться до этих kiiiiiiids ?!"x=23
, тогда это станет -23. Поскольку вопрос идет, 'Преобразуйте отрицательное число в положительное число в JS', но вышеупомянутое перевернет любое число, будь то положительное или отрицательное.x
всегда давать положительный результат. Мои извинения @myusuf.Math.abs(x)
или , если вы уверены , значение отрицательное перед преобразованием только предварять регулярный знак минус:x = -x
.источник
Знак минус (-) может преобразовывать положительные числа в отрицательные числа и отрицательные числа в положительные числа.
x=-y
это визуальный сахар дляx=(y*-1)
.источник
источник
Я нахожу это решение легко понять.
источник
Если вы хотите написать интересный код, который никто другой не сможет обновить, попробуйте это:
~ --x
источник
~
оператор конвертирует число в 32-битное целое число. Если в качестве входных данных у вас есть плавающее число, оно будет скрыто.Я знаю, что это немного поздно, но для людей, которые борются с этим, вы можете использовать следующие функции:
Превратить любое число положительным
Превратить любое число отрицательным
Инвертировать любое число
источник
Отрицательный к положительному
От положительного к отрицательному
источник
Умножение на (-1) - самый быстрый способ преобразования отрицательного числа в положительное. Но вы должны быть осторожны, чтобы не преобразовать мою ошибку положительного числа в отрицательное! Так что дополнительная проверка необходима ...
Тогда Math.abs, Math.floor и parseInt самый медленный.
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
источник
Я сделал что-то подобное сам.
Он проверяет, является ли число отрицательным, и если это так, умножьте на -1. Это вернет значение, оно зависит от вас, если вы его захватите. Если вы хотите назначить что-то, вы должны сделать что-то вроде:
Но это действительно зависит от вашей цели. Для меня это было просто, сделать его положительным, если отрицательным, иначе ничего не делать. Следовательно, '' в коде. В этом случае я использовал третичный оператор, потому что хотел, вполне может быть:
Я видел побитовое решение здесь и хотел прокомментировать это тоже.
На мой взгляд, эта мысль очень причудливая, мы могли бы переписать ее так:
Проще говоря, мы берем отрицательное число, убираем одно из него и затем побитово инвертируем его Если бы мы поразрядно инвертировали его, мы бы получили значение 1 слишком маленьким. Вы также можете сделать это:
Это будет делать то же самое, но сначала будет инвертировать, а затем добавить 1 к положительному числу. Хотя вы не можете сделать это:
Это не будет работать по причине приоритета , постфиксные операторы, такие как
num++
будут оцениваться раньше ~, и причина префикса++num
не будет работать, даже если он имеет тот же приоритет, что и побитовый НЕ (~), потому что он оценивается справа налево. Я пытался поменять их местами, но кажется, что префикс немного привередливый по сравнению с побитовым НЕ. +1 будет работать, потому что «+» имеет более высокий приоритет и будет оцениваться позже.Я нашел это решение довольно забавным и решил расширить его, так как оно было просто добавлено, и люди, которые смотрят на него, вероятно, игнорировали его. Хотя да, он не будет работать с поплавками.
Я надеюсь, что этот пост не отошел от первоначального вопроса. : /
источник
Мой минимальный подход
Для преобразования отрицательного числа в положительное и наоборот
источник
Вы можете использовать оператор ~, который логически преобразует число в отрицательное и добавляет 1 к отрицательному:
источник
Я знаю другой способ сделать это. Эта техника работает с негативного на позитивное и наоборот
Наоборот:
ЖИВОЙ КОД:
источник
Для функционального программирования у Рамды есть хороший метод для этого. Тот же метод работает от положительного к отрицательному и наоборот.
https://ramdajs.com/docs/#negate
источник
Если вы хотите, чтобы число всегда было положительным, независимо от того, что вы можете сделать это.
Вы также можете попробовать это, но я не рекомендую это:
Проблема в том, что вы можете изменить число на отрицательное, затем преобразовать в строку и удалить - из строки, а затем преобразовать обратно в int. Что, я думаю, потребует больше обработки, чем просто использование другой функции.
Я проверил это в php, и первая функция работает быстрее, но иногда JS делает некоторые безумные вещи, поэтому я не могу сказать наверняка.
источник
n*-n
должно бытьn*-1
. Я бы вообще удалил пример, поскольку преобразования типов и вызов метода очень неэффективны по сравнению с простотой первого примера. Даже причудливость JS не может здесь помочь