Положительное число на отрицательное число в 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 остается положительным ??

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



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

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)

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



1

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

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


3
просто -xхватит.
Антти Хаапала

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.