답변:
var x = -100; ~x+1 === 100
하지만 var x = 100; ~x+1 === -100
. Math.abs
그것들을 보완하는 것이 단순히 부호를 뒤집는 동안 항상 긍정적으로 만듭니다.
무엇에 대해 x *= -1
? 나는 그 단순함을 좋아한다.
x
뒤집어집니다. 경우 x = 23
그 방정식에 밀려되고, x
다음과 같아야한다 -23
. 에스 칼란 테 씨의 말에 따르면, "긍정적 인 시간은 부정과 같습니다. 부정의 시간은 부정과 같습니다." ... "이 kiiiiiiids에 어떻게 도달합니까?!"
x=23
-23이됩니다. 문제는 'JS에서 음수를 양수로 변환'하지만 위의 숫자는 양수 또는 음수입니다.
x
항상 긍정적 인 것은 아닙니다. 내 사과 @myusuf.
아무도 업데이트 할 수없는 재미있는 코드를 작성하려면 다음을 시도하십시오.
~ --x
~
연산자는 숫자를 32 비트 정수로 변환합니다. 입력으로 플로트가 있으면 호스로 연결됩니다.
나는 이것이 조금 늦다는 것을 알고 있지만, 이것으로 어려움을 겪고있는 사람들에게는 다음 기능을 사용할 수 있습니다.
숫자를 양수로 바꿉니다
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
음수를 양수로 변환하는 가장 빠른 방법은 (-1)을 곱하는 것입니다. 그러나 내 실수를 양수를 음수로 변환하지 않도록주의해야합니다! 따라서 추가 검사가 필요합니다 ...
그러면 Math.abs, Math.floor 및 parseInt가 가장 느립니다.
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
나는 이와 같은 것을 스스로했다.
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이 작동합니다.
나는 그 해결책이 오히려 재미 있다는 것을 알았고 거기에 던져 져서 그것을 무시하는 사람들을 게시했을 때 그것을 확장하기로 결정했습니다. 예, 수레에서는 작동하지 않습니다.
이 게시물이 원래 질문에서 멀어지지 않기를 바랍니다. : /
다른 방법을 알고 있습니다. 이 기술은 긍정에 부정적인 영향을 미칩니다
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);
함수형 프로그래밍을 위해 Ramda는이를위한 좋은 방법을 가지고 있습니다. 동일한 방법이 양에서 음으로 또는 그 반대로 작동합니다.
당신이 할 수있는 일에 관계없이 항상 양수가되기를 원한다면.
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의 기발함조차도 여기서 도움이 될 수 없습니다