Позитивне чи негативне число в JavaScript?


101

В основному, реверс абс. Якщо я маю:

if ($this.find('.pdxslide-activeSlide').index() < slideNum - 1) {
  slideNum = -slideNum
}
console.log(slideNum)

Незалежно від того, яка консоль завжди повертає додатне число. Як це виправити?

Якщо я:

if ($this.find('.pdxslide-activeSlide').index() < slideNum - 1) {
  _selector.animate({
    left: (-slideNum * sizes.images.width) + 'px'
  }, 750, 'InOutPDX')
} else {
  _selector.animate({
    left: (slideNum * sizes.images.width) + 'px'
  }, 750, 'InOutPDX')
}

це працює, але це не "СУХО" і просто дурно мати цілий блок коду ПРОСТО для -.


4
Я впевнений, що для цього існує плагін jQuery.
Якуб Хампл,

Відповіді:


191
Math.abs(num) => Always positive
-Math.abs(num) => Always negative

Однак ви розумієте, що для вашого коду

if($this.find('.pdxslide-activeSlide').index() < slideNum-1){ slideNum = -slideNum }
console.log(slideNum)

Якщо знайдений індекс 3, а slideNum 3,
то 3 <3-1 => false,
тому slideNum залишається додатним ??

Мені це більше схоже на логічну помилку.



29

Основна формула зворотного позитивного до негативного або негативного до позитивного:

i - (i * 2)

32
В чому проблема i * -1? Крім того, я не впевнений, що це відповідає на актуальне питання.
Andrew Barber

5
Це архітектурно залежить, але 0 - я міг би бути швидшим
Бен Таліадорос,

Здається, @AndrewBarber i * -1не працює в поточній версії chrome. Використовуйте -Math.abs (1), але не впевнені, чому це працює, сподіваємось, хтось може розширити пояснення чому.
Філіп Роллінз,

@PhilipRollins i * -1працюватиме завжди. я не знаю, як ви намагалися, можливо, у вас була якась друкарська помилка. Але ... що поганого в тому, i = -iщоб замість i = i * -1(або i *= -1) змінити позитивне на негативне чи негативне на позитивне?
Дієго Зорак Кі

@DiegoZoracKy Я теж так думав, але не для тієї версії chrome, яку я запускав, і вона працювала у firefox, тому про помилку не може бути й мови. Зараз я працюю на Linux, але ви можете перевірити свою теорію на хромі. Пам’ятайте про автоматичне оновлення chrome, щоб будь-які виправлення помилок були вже застосовані, а нові помилки будуть витіснені до спільноти, тобто це може бути помилка, яка тривала лише кілька днів і тепер назавжди виправлена.
Філіп Роллінз,

9

Щоб отримати від’ємну версію числа в JavaScript, ви завжди можете скористатися ~побітовим оператором.

Наприклад, якщо у вас є a = 1000і вам потрібно перетворити його на мінус, ви можете зробити наступне:

a = ~a + 1;

Що призведе до aбуття -1000.


Це швидше, ніж множення на від’ємне 1?
ryandawkins

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

@RyanDawkins це буде не швидше, ніж множення на -1. У Javascript спочатку немає булевих операторів, як це робить C. Отже, щоб виконати логічну операцію, JS повинен перетворювати між типами під капотом.
спінлок

2
Чому ні a = -a?
Дієго Зорак Кі

Побітове значення не заперечує число точно. ~1000є -1001, ні -1000.
brentonstrine

7
var x = 100;
var negX = ( -x ); // => -100

1
Будь ласка, додайте кілька пояснень, редагуючи свою відповідь, уникайте відповіді лише за кодом
GGO

1
@GGO ... Я не впевнений, як це ще не зрозуміло, але впевнений: додаючи знак мінуса перед значенням, потім обертаючи це в дужки, значення обчислюється ... результат - заперечення значення.
tpayne84

6

Ви впевнені, що контроль надходить у тіло if? Як і в тому, чи ifсправджується умова коли-небудь Тому що, якщо цього не станеться, тіло ifволі ніколи не буде страчене і slideNumзалишиться позитивним. Я ризикую здогадатися, що це, мабуть, те, що ви бачите.

Якщо я спробую наступне у Firebug, це, здається, працює:

>>> i = 5; console.log(i); i = -i; console.log(i);
5
-5

slideNum *= -1також має працювати. Як слід Math.abs(slideNum) * -1.


Я щойно зробив, if($this.find('.pdxslide-activeSlide').index() < slideNum-1){ slideNum *= -1 }і я все ще повертаюся позитивним у цьому console.log?
Оскар Годсон,

@ Оскар, Вівін каже, що $this.find('.pdxslide-activeSlide').index() < slideNum-1це завжди брехня.
Девід Танг,

4

Якщо вам не хочеться використовувати Math.Abs ​​* -1, ви можете зробити це просте твердження if: P

if (x > 0) {
    x = -x;
}

Звичайно, ви можете зробити це такою функцією

function makeNegative(number) {
    if (number > 0) {
        number = -number;
    }
}

makeNegative (-3) => -3 makeNegative (5) => -5

Сподіваюся, це допомагає! Math.abs, швидше за все, буде працювати для вас, але якщо це не так мало


Перш ніж відповісти на питання, ви також повинні розглянути, коли його задали. Цьому питанню майже 5 років. Отже, якщо технологія не змінилася і тепер є краща / більш відповідна відповідь, як правило, не надто багато доданої вартості, пропонуючи іншу відповідь.
Ігор

1
Я особисто весь час переглядаю старі запитання щодо переповнення стека. Звичайно, це не буде надто корисним для професіонала, але, можливо, новачок може оцінити підказку! Це означає, що найпростіший спосіб насправді такий, як вище -Math.Abs ​​(-3) Як вже було сказано вище, Math.Abs ​​перетворює будь-яке значення на позитивне. Тоді негативний префікс робить його негативним
Ash Pettit

Отримано. Особисто я ціную цю відповідь і вважаю її цінною. Ви можете вчитися у кого завгодно.
jeremysawesome

3
var i = 10;
i = i / -1;

Результат: -10

var i = -10;
i = i / -1;

Результат: 10

Якщо ділити на мінус 1, воно завжди переверне ваше число в будь-якому напрямку.



2

Для цього у Javascript є спеціальний оператор: одинарне заперечення .

TL; DR: Це знак мінус!

Щоб заперечити число, просто додайте його префіксом -найбільш інтуїтивно зрозумілим способом. Не потрібно писати функцію, використовувати Math.abs()множення на -1або побітовий оператор.

Унарне заперечення працює з числовими літералами:

let a = 10;  // a is `10`
let b = -10; // b is `-10`

Він також працює зі змінними:

let x = 50;
x = -x;      // x is now `-50`

let y = -6;
y = -y;      // y is now `6`

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

l = 10;       // l is `10`
m = -10;      // m is `-10`
n = -(10);    // n is `-10`
o = -(-(10)); // o is `10`
p = -(-10);   // p is `10` (double negative makes a positive)

Все вищесказане також працює зі змінною.


1

Використовуйте 0 - x

x - число, яке потрібно інвертувати


3
просто -xвистачає.
Antti Haapala

1
Просто -x призводить до -0. Це рішення краще, якщо там можуть бути нулі
chrismarx

1

Це перетворить негативний масив у позитивний або навпаки

function negateOrPositive(arr) {
    arr.map(res => -res)
};

0

У ванільному javascript

if(number > 0)
  return -1*number;

Де число вище - це додатне число, яке ви маєте намір перетворити

Цей код перетворить просто позитивні числа в негативні числа, простим шляхом множення на -1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.