Положительное число на отрицательное число в JavaScript?

103

В основном, обратное абс. Если бы у меня был:

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.
Якуб Хэмпл,

Ответы:

193
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 остается положительным ??

Мне это больше похоже на логическую ошибку.

RichardTheKiwi
источник
84

Обратная сторона абс Math.abs(num) * -1.

Якуб Хампл
источник
10
Короче:return -Math.abs(num);
sarunast
29

Основная формула преобразования положительного в отрицательное или отрицательного в положительное:

i - (i * 2)
Блейк
источник
32
Что не так i * -1? Кроме того, я не уверен, что это отвечает на актуальный вопрос.
Эндрю Барбер,
5
Это архитектурно зависит, но 0 - я мог бы быть быстрее
Бен Талиадорос
@AndrewBarber i * -1, похоже, не работает в текущей версии Chrome. Используйте -Math.abs (1), но не знаю, почему это работает, надеюсь, кто-то сможет объяснить, почему.
Филип Роллинз
@PhilipRollins i * -1будет работать всегда. Не знаю, как вы пытались, может, у вас была опечатка. Но ... что плохого в том, i = -iчтобы вместо i = i * -1(или i *= -1) обратить положительное на отрицательное или отрицательное на положительное?
Diego ZoracKy
@DiegoZoracKy Я тоже так думал, но не для той версии Chrome, которую я использовал, и она работала в firefox, поэтому об опечатке не может быть и речи. Я сейчас использую Linux, но вы можете проверить свою теорию на Chrome. Помните об автоматических обновлениях хрома, поэтому любые исправления ошибок уже будут применены, а любые новые ошибки будут сообщены сообществу, что означает, что это может быть ошибка, которая длилась всего несколько дней и теперь исправлена ​​навсегда.
Филип Роллинз,
9

Чтобы получить отрицательную версию числа в JavaScript, вы всегда можете использовать ~побитовый оператор.

Например, если у вас есть a = 1000и вам нужно преобразовать его в отрицательный, вы можете сделать следующее:

a = ~a + 1;

Что привело бы к aсуществованию -1000.

Бенджамин Уильямс
источник
Это быстрее, чем умножение на минус 1?
ryandawkins 02
Я не уверен, честно говоря, вам нужно будет это изучить.
Бенджамин Уильямс
@RyanDawkins это не будет быстрее, чем умножение на -1. В Javascript изначально нет логических операторов, как в C. Итак, чтобы выполнить логическую операцию, JS должен преобразовать типы под капотом.
spinlock
2
А почему бы и нет a = -a?
Diego ZoracKy
Побитовое не отрицает точное число. ~1000есть -1001, нет -1000.
brentonstrine
7
var x = 100;
var negX = ( -x ); // => -100
tpayne84
источник
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 ​​превращает любое значение в положительное. Тогда отрицательный префикс делает его отрицательным
Эш Петтит
Проголосовали. Лично я ценю этот ответ и считаю его ценным. Вы можете учиться у кого угодно.
jeremysawesome
3
var i = 10;
i = i / -1;

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

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

Результат: 10

Если вы разделите на минус 1, это всегда будет переворачивать ваше число в любом случае.

Джефф Прайс
источник
3

В 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)

Все вышеперечисленное работает и с переменной.

Brentonstrine
источник
2
num * -1

Это сделает это за вас.

Вибхор Дубе
источник
1

Используйте 0 - x

x - число, которое вы хотите инвертировать

milesman34
источник
3
просто -xхватит.
Антти Хаапала
1
Просто -x приводит к -0. Это решение лучше, если там могут быть нули-
chrismarx
1

Он преобразует отрицательный массив в положительный или наоборот

function negateOrPositive(arr) {
    arr.map(res => -res)
};
Flash Noob
источник
0

В ванильном javascript

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

Где число выше - это положительное число, которое вы собираетесь преобразовать.

Этот код преобразует только положительные числа в отрицательные числа простым умножением на -1.

перфорация
источник