JavaScript에서 음수를 양수로 변환


308

JavaScript에서 숫자를 양수로 변환하는 수학 함수가 있습니까?

답변:


703

당신은 이것을 사용할 수 있습니다 ...

Math.abs(x)

Math​.abs()| MDN


1
~ x + 1을 고려할 수도 있습니다. 꽤 빠르지 만 무엇을하고 있는지 명확하지 않습니다. 차이점을 보여주기 위해 이것을 올렸습니다 : jsperf.com/absolute-int
omgaz

22
@omgaz 그들은 동일하지 않습니다 ... var x = -100; ~x+1 === 100하지만 var x = 100; ~x+1 === -100. Math.abs그것들을 보완하는 것이 단순히 부호를 뒤집는 동안 항상 긍정적으로 만듭니다.
jduncanator

-x를 고려할 수도 있습니다. 꽤 빠르다!
amara

93

무엇에 대해 x *= -1? 나는 그 단순함을 좋아한다.


17
이것은 간단하지만 숫자가 항상 음수 인 것으로 가정합니다. 유스 케이스가 그런 경우라면 굉장합니다. 그렇지 않으면주의를 기울일 것입니다.
myusuf

4
@myusuf에 동의하지 않습니다. 모든 숫자가 x뒤집어집니다. 경우 x = 23그 방정식에 밀려되고, x다음과 같아야한다 -23. 에스 칼란 테 씨의 말에 따르면, "긍정적 인 시간은 부정과 같습니다. 부정의 시간은 부정과 같습니다." ... "이 kiiiiiiids에 어떻게 도달합니까?!"
ExcellentSP

2
어제 정확히 @Shane. 인 경우 x=23-23이됩니다. 문제는 'JS에서 음수를 양수로 변환'하지만 위의 숫자는 양수 또는 음수입니다.
myusuf

2
이해했다. 귀하의 의견에 대한 나의 해석은 숫자를 뒤집어 x항상 긍정적 인 것은 아닙니다. 내 사과 @myusuf.
ExcellentSP

1
이 솔루션은 부동 소수 점수에는 적용되지 않습니다. 소수 부분 만받습니다
Oscar Luza

46

Math.abs(x)당신이있는 경우 또는 특정 값은 일반 마이너스 기호를 앞에 추가 변환하기 전에 부정적입니다 x = -x.


29

빼기 부호 (-)는 양수를 음수로, 음수를 양수로 변환 할 수 있습니다. x=-y에 대한 시각적 설탕입니다 x=(y*-1).

var y = -100;
var x =- y;


12
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

이 솔루션을 쉽게 이해할 수 있습니다.


8

아무도 업데이트 할 수없는 재미있는 코드를 작성하려면 다음을 시도하십시오.

~ --x


1
이것은 부동 소수점에서 작동하지 않으며 ... x 값도 변경됩니다.
Alexis Wilke

x를 변경할 수 없다면 : ~ --x; ++ x
Kyle

1
Kyle, ~연산자는 숫자를 32 비트 정수로 변환합니다. 입력으로 플로트가 있으면 호스로 연결됩니다.
Alexis Wilke

7

나는 이것이 조금 늦다는 것을 알고 있지만, 이것으로 어려움을 겪고있는 사람들에게는 다음 기능을 사용할 수 있습니다.

  • 숫자를 양수로 바꿉니다

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
    
  • 음수로 바꾸십시오

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
    
  • 숫자 반전

    let x =  54;
    let y = -54;
    let resultx = -(x);         // -54
    let resulty = -(y);         //  54
    

6

부정에 긍정적

var X = -10 ;
var number = Math.abs(X);     //result 10

양수

var X = 10 ;
var number = (X)*(-1);       //result -10

나는 당신이 보여주고 싶은 것을 보지만 당신이 그것을 넣는 방식은 혼란 스럽습니다. 어쩌면 당신은 : 긍정적으로 : abs를 사용하고 부정적인 것을 abs (x) * -1로 지정해야합니다. 이렇게하면 이전 X 기호가 무엇인지 암시하지 않습니다.
Dionys

5

음수를 양수로 변환하는 가장 빠른 방법은 (-1)을 곱하는 것입니다. 그러나 내 실수를 양수를 음수로 변환하지 않도록주의해야합니다! 따라서 추가 검사가 필요합니다 ...

그러면 Math.abs, Math.floor 및 parseInt가 가장 느립니다.

여기에 이미지 설명을 입력하십시오

https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1


1
우리 중 일부는 그러한 경우에 기본 수학이 얼마나 유용한 지 잊어 버립니다. 그런 단순함을 상기시켜 주셔서 감사합니다.
Alexander Dixon

2

나는 이와 같은 것을 스스로했다.

num<0?num*=-1:'';

숫자가 음수인지 확인하고, 음수이면 -1을 곱합니다. 값을 캡처하면 캡처합니다. 그것을 무언가에 할당하려면 다음과 같이해야합니다.

var out = num<0?num*=-1:num; //I think someone already mentioned this variant.

그러나 그것은 실제로 당신의 목표가 무엇인지에 달려 있습니다. 나를 위해 그것은 간단했다, 부정적인 경우 긍정적으로, 그렇지 않으면 아무것도하지 마십시오. 따라서 코드에서 ''입니다. 이 경우 내가 원했던 3 차 연산자 원인을 사용했습니다.

if(num<0)num*=-1;

나는 여기서 비트 솔루션을 보았고 그것에 대해서도 언급하고 싶었습니다.

~--num; //Drawback for this is that num original value will be reduced by 1

이 소망은 제 생각에는 매우 환상적입니다. 우리는 이것을 다음과 같이 다시 작성할 수 있습니다.

~(num = num-1);

간단히 말해서, 우리는 음수를 취하고 그것을 빼고 비트 단위로 뒤집습니다. 비트 단위로 반전 한 경우 일반적으로 값 1이 너무 작습니다. 당신은 또한 이것을 할 수 있습니다 :

~num+1; //Wont change the actual num value, merely returns the new value

그것은 똑같이하지만 먼저 반전 한 다음 양수에 1을 더합니다. 당신이 할 수는 없지만 :

~num++; //Wont display the right value.

우선 순위의 원인은 작동하지 않습니다. num++~와 같은 접두사 연산자 는 ~ 이전에 평가 될 것이며 ++num, NOT (~)과 같은 우선 순위에도 접 두부가 작동하지 않는 이유는 오른쪽에서 왼쪽으로 평가되기 때문입니다. 나는 그것들을 바꾸려고 시도했지만 접두사는 비트 NOT에 비해 약간 까다로운 것 같습니다. '+'가 우선 순위가 높고 나중에 평가되므로 +1이 작동합니다.

나는 그 해결책이 오히려 재미 있다는 것을 알았고 거기에 던져 져서 그것을 무시하는 사람들을 게시했을 때 그것을 확장하기로 결정했습니다. 예, 수레에서는 작동하지 않습니다.

이 게시물이 원래 질문에서 멀어지지 않기를 바랍니다. : /


2

나의 최소한의 접근

음수를 양수로 또는 그 반대로 변환

var num = -24;
num -= num*2;
console.log(num)
// result = 24


0

숫자를 음수로 논리적으로 변환하고 1을 음수로 추가 하는 ~ 연산자를 사용할 수 있습니다 .

var x = 3;
x = (~x + 1);
console.log(x)
// result = -3


0

다른 방법을 알고 있습니다. 이 기술은 긍정에 부정적인 영향을 미칩니다

var x = -24;
var result = x * -1;

반대의 경우 :

var x = 58;
var result = x * -1;

라이브 코드 :

// NEGATIVE TO POSITIVE: ******************************************
var x = -24;
var result = x * -1;
console.log(result);

// VICE VERSA: ****************************************************
var x = 58;
var result = x * -1;
console.log(result);

// FLOATING POINTS: ***********************************************
var x = 42.8;
var result = x * -1;
console.log(result);

// FLOATING POINTS VICE VERSA: ************************************
var x = -76.8;
var result = x * -1;
console.log(result);


그것은 질문에 대답하지 않습니다. dave는 값을 음수에서 양수로 , 양수에서 양수 변경하는 함수를 요청합니다 .
RaphaMex

그의 질문에 "자바 스크립트에 숫자를 양수로 변환하는 수학 함수가 있습니까?" 그는 긍정적에서 긍정적으로 언급하지 않습니다. 그는 부정적인 것만 긍정적으로 언급합니다. 왜 양수를 양수로 바꾸고 싶습니까? 값은 같습니다.
Tarryk Ttmm

질문 아래의 설명에서 설명을 요청할 수 있습니다. 어쨌든, 올바른 대답이 있습니다. 다시 읽어 보면 긍정적 인 기능을 긍정적으로 바꾸는 내장 함수가 있다는 것을 알 수 있습니다.
RaphaMex


0

당신이 할 수있는 일에 관계없이 항상 양수가되기를 원한다면.

function toPositive(n){
    if(n < 0){
        n = n * -1;
    }
    return n;
}
var a = toPositive(2);  // 2
var b = toPositive(-2); // 2

당신은 또한 이것을 시도 할 수 있지만, 나는 그것을 권장하지 않습니다 :

function makePositive(n){
    return Number((n*-n).toString().replace('-','')); 
}
var a = makePositive(2);  // 2
var b = makePositive(-2); // 2

이 문제는 숫자를 음수로 변경 한 다음 문자열로 변환하고 문자열에서 - 를 제거한 다음 int로 다시 변환 할 수 있다는 것입니다. 다른 기능을 사용하는 것보다 더 많은 처리가 필요하다고 생각합니다.

나는 이것을 PHP로 테스트했으며 첫 번째 기능은 더 빠르지 만 때로는 JS가 미친 일을하기 때문에 확실하게 말할 수 없습니다.


두 번째 예는 입력 숫자의 거듭 제곱을 출력합니다. n*-n이어야합니다 n*-1. 그러나 형식 변환과 메서드 호출은 첫 번째 예제의 단순성과 비교할 때 매우 비효율적이므로 예제를 모두 제거했습니다. JS의 기발함조차도 여기서 도움이 될 수 없습니다
Gust van de Wal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.