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')
}

그것은 작동하지만 "DRY"가 아니고 단지 -.


4
이를위한 jQuery 플러그인이 있다고 확신합니다.
Jakub Hampl 2011

답변:


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 - 내가 더 빠를 수 있습니다
벤 Taliadoros

@AndrewBarber i * -1는 현재 버전의 크롬에서 작동하지 않는 것 같습니다. 사용 -Math.abs (1) 이것이 왜 작동하는지 확실하지 않습니다. 누군가가 그 이유를 확장 할 수 있기를 바랍니다.
Philip Rollins

@PhilipRollins i * -1는 항상 작동합니다. 어떻게 시도했는지 모르겠습니다. 오타가있을 수도 있습니다. 하지만 ... (또는 ) i = -i대신 긍정에서 부정으로 또는 부정에서 긍정으로 반전 하는 것이 잘못된 것은 무엇 입니까? i = i * -1i *= -1
Diego ZoracKy

@DiegoZoracKy 나도 그렇게 생각했지만 크롬 버전이 아니라 파이어 폭스에서 작동했기 때문에 오타는 문제가되지 않습니다. 저는 지금 Linux를 사용하고 있지만 크롬에서 이론을 테스트 할 수 있습니다. 크롬 자동 업데이트를 염두에두면 버그 수정이 이미 적용되고 새로운 버그가 커뮤니티에 푸시 될 수 있습니다. 이는 며칠 동안 만 지속 된 버그 일 수 있으며 지금은 영원히 수정 될 수 있음을 의미합니다.
Philip Rollins

9

JavaScript에서 음수 버전을 얻으려면 항상 다음을 사용할 수 있습니다. ~ 비트 연산자를 .

예를 들어, a = 1000네거티브로 변환해야하는 경우 다음을 수행 할 수 있습니다.

a = ~a + 1;

결과적 a으로 -1000.


마이너스 1을 곱하는 것보다 빠릅니까?
ryandawkins

나는 당신이 조사해야 할 정직한 것이 확실하지 않습니다.
Benjamin Williams

@RyanDawkins 이것은 -1을 곱하는 것보다 빠르지 않습니다. Javascript에는 기본적으로 C와 같은 부울 연산자가 없습니다. 따라서 부울 연산을 수행하려면 JS가 내부에서 유형간에 변환해야합니다.
spinlock

2
왜 안돼 a = -a?
Diego ZoracKy

Bitwise는 숫자를 정확하게 부정하지 않습니다. ~1000있다 -1001, 없다 -1000.
brentonstrine

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

1
답변을 편집 SOMES 설명을 추가하십시오, 피할 코드는 대답
GGO

1
@GGO ... 어떻게 이것이 이미 명확하지 않은지 잘 모르겠지만 확실합니다. 값 앞에 마이너스 기호를 추가 한 다음 괄호로 묶으면 값이 평가됩니다. 결과는 Negation of the 값.
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에서 긍정적으로 반환됩니까?
Oscar Godson 2011

@Oscar, Vivin이 말하는 $this.find('.pdxslide-activeSlide').index() < slideNum-1것은 항상 거짓이라는 것입니다.
David Tang

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 2016 년

찬성. 개인적으로 나는이 답변에 감사하고 가치가 있음을 알았습니다. 누구에게나 배울 수 있습니다.
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

음의 배열을 양수로 또는 그 반대로 변환합니다.

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

0

바닐라 자바 ​​스크립트에서

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

어디 위의 양수가 당신이 변환하고자하는

이 코드는 -1을 곱하여 양수를 음수로 간단히 변환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.