Відповіді:
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
Я знаю інший спосіб зробити це. Ця методика працює негативно до позитиву & Vice Versa
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 тут не може допомогти