сделать значение переменной положительным - PullRequest
43 голосов
/ 09 ноября 2009

У меня есть переменная, которая иногда будет отрицательной, а иногда положительной.

Прежде чем использовать его, мне нужно сделать его позитивным. Как мне это сделать?

Ответы [ 6 ]

54 голосов
/ 09 ноября 2009

Используйте метод Math.abs .

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

Посмотрите на ответ на этот вопрос для более подробной информации. Для небольших чисел разница незначительна, и я думаю, что Math.abs - намного более чистый способ «самодокументирования» кода.

22 голосов
/ 09 ноября 2009

Между этими двумя вариантами (спасибо @Kooilnc за пример):

Number.prototype.abs = function(){
    return Math.abs(this);
};

и

var negative = -23, 
    positive = -negative>0 ? -negative : negative;

идти со вторым (отрицание). Это не требует вызова функции, и процессор может сделать это за очень мало инструкций. Быстро, просто и эффективно.

13 голосов
/ 09 ноября 2009
if (myvar < 0) {
  myvar = -myvar;
}

или

myvar = Math.abs(myvar);
2 голосов
/ 09 ноября 2009

или, если вы хотите избежать вызова функции (и ветвления), вы можете использовать этот код:

x = (x ^ (x >> 31)) - (x >> 31);

это немного "хакерски" и выглядит довольно странно :), но я бы все равно придерживался Math.abs (просто хотел показать еще один способ сделать это)

Кстати, это работает только в том случае, если базовый движок javascript хранит целые числа как 32-битные, что на моем компьютере в Firefox 3.5 (32-битное, поэтому он может не работать на 64-битной машине, не проверял ...) *

1 голос
/ 09 ноября 2009

Это не реализация jQuery, но использует библиотеку Math из Javascript

x = Math.abs (x);

0 голосов
/ 18 марта 2016

Если вы не хотите использовать Math.Abs, вы можете сделать это простым оператором if: P

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

Конечно, вы можете сделать эту функцию такой, как эта

function makePositive(number) {
    if (number < 0) {
        number = -number;
    }
}

makepositive (-3) => 3 makepositive (5) => 5

Надеюсь, это поможет! Math.abs, вероятно, будет работать для вас, но если это не так мало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...