Перетворити негативне число у позитивне в JavaScript


308

Чи є математична функція в JavaScript, яка перетворює числа в додатне значення?

Відповіді:


703

Ви можете використовувати це ...

Math.abs(x)

Math​.abs()| MDN


1
Ви можете навіть розглянути ~ x + 1. Це досить швидко, але не зрозуміло, що це робить. Розгорнувши це, щоб показати різницю: jsperf.com/absolute-int
omgaz

22
@omgaz Вони не те ж саме ... var x = -100; ~x+1 === 100але var x = 100; ~x+1 === -100. Math.absзавжди робить його позитивним, тоді як прийняття доповнення просто перевертає знак.
jduncanator

Ви можете навіть розглянути -x. Це досить швидко!
amara

93

Про що x *= -1? Мені подобається її простота.


17
Хоча це просто, але можна припустити, що число завжди буде від’ємним. Якщо випадок використання такий, то це приголомшливо. В іншому випадку я б порадив обережність.
myusuf

4
Я не згоден @myusuf. Будь-яке число, яке є, xбуде перевернуте. Якщо x = 23і буде занесено в це рівняння, xто дорівнює -23. За словами пана Ескаланте, "Позитивний час негативний дорівнює негативному. Негативний час негативний дорівнює позитивному". ... "Як мені дістатися до цих kiiiiiiids ?!"
ВідмінноSP

2
Рівно @Shane вчора. Якщо x=23, то стане -23. Як йдеться в запитанні, "Перетворити від'ємне число в додатне число в JS", але вищесказане переверне будь-яке число, будь то позитивне чи негативне.
myusuf

2
Зрозумів. Моє тлумачення Вашого коментаря було в контексті перегортання номера та не xзавжди позитивного. Мої вибачення @myusuf.
ВідмінноSP

1
просто нагадайте, що це рішення не застосовується до плаваючих чисел, воно отримує лише десяткову частину
Оскар Луза

46

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


29

Знак мінус (-) може конвертувати додатні числа в негативні числа, а від’ємні числа - в додатні. x=-yє зоровий цукор для x=(y*-1).

var y = -100;
var x =- y;


12
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

Я вважаю це рішення легким для розуміння.


8

Якщо ви хочете написати цікавий код, який ніхто більше не може оновлювати, спробуйте це:

~ --x


1
Це не працює з плаваючими точками, хоча ... і значення x також змінюється.
Алексіс Вілке

Я думаю, якщо ви не зможете змінити х: ~ --x; ++ x
Кайл

1
Кайл, ~оператор перетворює число в 32-бітове ціле число. Якщо у вас є поплавок як вхід, він отримує шланг.
Алексіс Вілке

7

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

  • Поверніть будь-яке число додатним

    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

6

Негативне до позитивного

var X = -10 ;
var number = Math.abs(X);     //result 10

Позитивний до негативного

var X = 10 ;
var number = (X)*(-1);       //result -10

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

5

Помноження на (-1) - це найшвидший спосіб перетворення від’ємного числа в додатне. Але ви повинні бути обережними, щоб не перетворити мою помилку позитивного числа на негативну! Тож потрібна додаткова перевірка ...

Тоді Math.abs, Math.floor і parseInt - найповільніші.

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

https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1


1
Деякі з нас забувають, наскільки корисна основна математика може бути в таких випадках. Дякую, що нагадали про таку простоту.
Олександр Діксон

2

Я щось подібне робив сам.

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 буде спрацьованим, оскільки "+" має вищий пріоритет і буде оцінено пізніше.

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

Я сподіваюся, що ця публікація не відійшла від початкового питання. : /



0

Ви можете використовувати оператор ~, який логічно перетворює число в негативне і додає 1 до мінус:

var x = 3;
x = (~x + 1);
console.log(x)
// result = -3


0

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


Це не відповідає на запитання. Дейв запитує функцію, яка змінює значення негативне на позитивне і позитивне на позитивне .
RaphaMex

Його питання говорить: "Чи існує математична функція в JavaScript, яка перетворює числа в позитивне значення?" Він не згадує позитивного до позитивного. Він згадує лише негативне до позитивного. Чому ви хочете перетворити позитивне на позитивне. Значення було б однаковим.
Таррик Ттмм

Ви можете попросити роз'яснення в коментарі нижче питання. У будь-якому випадку є прийнята відповідь, яка є правильною. Ви можете прочитати його ще раз і побачити, що є вбудована функція, яка ... перетворює позитивне в позитивне.
RaphaMex

0

Для функціонального програмування Рамда має приємний метод для цього. Цей же метод працює, переходячи від позитивного до негативного і навпаки.

https://ramdajs.com/docs/#negate


0

Якщо ви хочете, щоб число завжди було позитивним, незалежно від того, що ви можете зробити.

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 тут не може допомогти
Густ ван де Валь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.