Ответы:
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.
Знак минус (-) может преобразовывать положительные числа в отрицательные числа и отрицательные числа в положительные числа. x=-yэто визуальный сахар для x=(y*-1).
var y = -100;
var x =- y;
Если вы хотите написать интересный код, который никто другой не сможет обновить, попробуйте это:
~ --x
~оператор конвертирует число в 32-битное целое число. Если в качестве входных данных у вас есть плавающее число, оно будет скрыто.
Я знаю, что это немного поздно, но для людей, которые борются с этим, вы можете использовать следующие функции:
Превратить любое число положительным
let x = 54;
let y = -54;
let resultx = Math.abs(x); // 54
let resulty = Math.abs(y); // 54
Превратить любое число отрицательным
let x = 54;
let y = -54;
let resultx = -Math.abs(x); // -54
let resulty = -Math.abs(y); // -54
Инвертировать любое число
let x = 54;
let y = -54;
let resultx = -(x); // -54
let resulty = -(y); // 54
Отрицательный к положительному
var X = -10 ;
var number = Math.abs(X); //result 10
От положительного к отрицательному
var X = 10 ;
var number = (X)*(-1); //result -10
Умножение на (-1) - самый быстрый способ преобразования отрицательного числа в положительное. Но вы должны быть осторожны, чтобы не преобразовать мою ошибку положительного числа в отрицательное! Так что дополнительная проверка необходима ...
Тогда Math.abs, Math.floor и parseInt самый медленный.
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
Я сделал что-то подобное сам.
num<0?num*=-1:'';
Он проверяет, является ли число отрицательным, и если это так, умножьте на -1. Это вернет значение, оно зависит от вас, если вы его захватите. Если вы хотите назначить что-то, вы должны сделать что-то вроде:
var out = num<0?num*=-1:num; //I think someone already mentioned this variant.
Но это действительно зависит от вашей цели. Для меня это было просто, сделать его положительным, если отрицательным, иначе ничего не делать. Следовательно, '' в коде. В этом случае я использовал третичный оператор, потому что хотел, вполне может быть:
if(num<0)num*=-1;
Я видел побитовое решение здесь и хотел прокомментировать это тоже.
~--num; //Drawback for this is that num original value will be reduced by 1
На мой взгляд, эта мысль очень причудливая, мы могли бы переписать ее так:
~(num = num-1);
Проще говоря, мы берем отрицательное число, убираем одно из него и затем побитово инвертируем его Если бы мы поразрядно инвертировали его, мы бы получили значение 1 слишком маленьким. Вы также можете сделать это:
~num+1; //Wont change the actual num value, merely returns the new value
Это будет делать то же самое, но сначала будет инвертировать, а затем добавить 1 к положительному числу. Хотя вы не можете сделать это:
~num++; //Wont display the right value.
Это не будет работать по причине приоритета , постфиксные операторы, такие как num++будут оцениваться раньше ~, и причина префикса ++numне будет работать, даже если он имеет тот же приоритет, что и побитовый НЕ (~), потому что он оценивается справа налево. Я пытался поменять их местами, но кажется, что префикс немного привередливый по сравнению с побитовым НЕ. +1 будет работать, потому что «+» имеет более высокий приоритет и будет оцениваться позже.
Я нашел это решение довольно забавным и решил расширить его, так как оно было просто добавлено, и люди, которые смотрят на него, вероятно, игнорировали его. Хотя да, он не будет работать с поплавками.
Я надеюсь, что этот пост не отошел от первоначального вопроса. : /
Мой минимальный подход
Для преобразования отрицательного числа в положительное и наоборот
var num = -24;
num -= num*2;
console.log(num)
// result = 24
Вы можете использовать оператор ~, который логически преобразует число в отрицательное и добавляет 1 к отрицательному:
var x = 3;
x = (~x + 1);
console.log(x)
// result = -3
Я знаю другой способ сделать это. Эта техника работает с негативного на позитивное и наоборот
var x = -24;
var result = x * -1;
Наоборот:
var x = 58;
var result = x * -1;
ЖИВОЙ КОД:
// NEGATIVE TO POSITIVE: ******************************************
var x = -24;
var result = x * -1;
console.log(result);
// VICE VERSA: ****************************************************
var x = 58;
var result = x * -1;
console.log(result);
// FLOATING POINTS: ***********************************************
var x = 42.8;
var result = x * -1;
console.log(result);
// FLOATING POINTS VICE VERSA: ************************************
var x = -76.8;
var result = x * -1;
console.log(result);
Для функционального программирования у Рамды есть хороший метод для этого. Тот же метод работает от положительного к отрицательному и наоборот.
Если вы хотите, чтобы число всегда было положительным, независимо от того, что вы можете сделать это.
function toPositive(n){
if(n < 0){
n = n * -1;
}
return n;
}
var a = toPositive(2); // 2
var b = toPositive(-2); // 2
Вы также можете попробовать это, но я не рекомендую это:
function makePositive(n){
return Number((n*-n).toString().replace('-',''));
}
var a = makePositive(2); // 2
var b = makePositive(-2); // 2
Проблема в том, что вы можете изменить число на отрицательное, затем преобразовать в строку и удалить - из строки, а затем преобразовать обратно в int. Что, я думаю, потребует больше обработки, чем просто использование другой функции.
Я проверил это в php, и первая функция работает быстрее, но иногда JS делает некоторые безумные вещи, поэтому я не могу сказать наверняка.
n*-nдолжно быть n*-1. Я бы вообще удалил пример, поскольку преобразования типов и вызов метода очень неэффективны по сравнению с простотой первого примера. Даже причудливость JS не может здесь помочь