음수를 양수로 만드십시오


146

숫자 집합을 합산하는 Java 메소드가 있습니다. 그러나 음수를 양수로 취급하고 싶습니다. 따라서 (1) + (2) + (1) + (-1)은 5와 같아야합니다.

나는이 작업을 수행하는 매우 쉬운 방법이 있다고 확신합니다. 어떻게하는지 모르겠습니다.



5
그러한 기본적인 질문들이 얼마나 많은지지를 받는지 놀랍게도 ...
Jose Rui Santos

내 질문은 이것보다 더 합리적이지만 아직 더 많은 다운 보트가 있습니다.
아무도

답변:


366

Math.abs를 호출하십시오 . 예를 들면 다음과 같습니다.

int x = Math.abs(-5);

로 설정 x됩니다 5.


42
예를 들어 Math.abs (Integer.MIN_VALUE) = Integer.MIN_VALUE와 같은 경우에 유의하십시오.
Zach Scrivena

((a <= 0.0D)? 0.0D-a : a)
Koekiebox

103

설명하는 개념을 "절대 값"이라고하며 Java에는 Math.abs 라는 함수 가 있습니다. 또는 함수 호출을 피하고 직접 할 수 있습니다.

number = (number < 0 ? -number : number);

또는

if (number < 0)
    number = -number;

21
오, 딜레마 시간-똑같이 좋은 답변이 너무 많아서 내 것을 삭제할 수도 있습니다. 그러나 나는 40 점을 잃을 것이고, 그렇게하면 Jon Skeet을 잡지 못할 것입니다.
Paul Tomblin

3
표준 라이브러리 호출을 재발 명하여 죄송합니다.
cletus

12
@cletus, 표준 라이브러리 호출을 이미 언급 했습니까? 아니면이 경우 "재창조"는 라이브러리를 호출하는 명령이 적습니까?
Paul Tomblin

또한 라이브러리 호출의 세부 사항을 이해할 가치가 있습니다. 특히 라이브러리 호출에 부작용이 있거나 Paul과 같은 성능 문제가 언급 된 경우.
simon

또한 @cletus -1 때문에 +1입니다. 문제에 대한 최상의 표준 솔루션과 해당 솔루션이 실제로 수행하는 작업 (또는 이와 유사한 작업)을 모두 보여줌으로써 더 나은 프로그래머를 만들 수 있습니다.
Francisco Zarabozo

19

당신은 절대 가치를 찾고 있습니다, 친구. Math.abs(-5)5를 반환합니다 ...


12

abs기능을 사용하십시오 :

int sum=0;
for(Integer i : container)
  sum+=Math.abs(i);

8

이 코드는 양수로 호출 해도 안전 하지 않습니다 .

int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20

3
이 대신에 -1을 곱할 수 있습니다. 아무것도 빠졌습니까?
Siva Kranthi Kumar

7

이것을 시도하십시오 (단항 연산자이기 때문에 x 앞의 음수가 유효합니다 . 여기에서 더 찾으 십시오 ).

int answer = -x;

이를 통해 양수를 음수로, 음수를 양수로 바꿀 수 있습니다.


그러나 음수를 양수로 만들려면 다음을 시도하십시오.

int answer = Math.abs(x);

또는 어떤 이유로 abs () 메소드를 사용하지 않으려면 다음을 시도하십시오.

int answer = Math.sqrt(Math.pow(x, 2));

그것이 도움이되기를 바랍니다! 행운을 빕니다!


6

절대 값에 대해 묻고 있습니까?

Math.abs (...)는 아마도 원하는 함수입니다.


6

각 번호를로 묶으려고 Math.abs()합니다. 예 :

System.out.println(Math.abs(-1));

"1"을 인쇄합니다.

Math.-part를 작성하지 않으려면 Math 유틸리티를 정적으로 포함시킬 수 있습니다. 그냥 써

import static java.lang.Math.abs;

수입품과 함께, 당신은 abs()서면으로 -function을 참조 할 수 있습니다

System.out.println(abs(-1));

5

가장 쉬운 방법은 자세한 방법은 Math.abs () 호출에서 각 숫자를 래핑하는 것입니다.

Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)

코드 구성 방식을 반영하기 위해 논리 변경 사항이 포함됩니다. 아마도 장황하지만, 그것은 당신이 원하는 것을합니다.


3
정적 가져 오기로 덜 장황하게 만들 수 있습니다.
Dan Dyer

1
값을 직접 제어 할 수 있다면 단순히 -부호 를 제거하는 것이 좋지 않을까요? 또는 그렇지 않으면 제어 할 수없는 경우를 포함하여 absoluteSum( int[] values ){ /*loop with Math.abs()*/ }각 값에 Math.abs ()를 수동으로 래핑하는 대신 함수를 사용하는 것이 더 좋지 않습니까? [-1]
XenoRo

나는 동의한다. 잘 알려진 함수로 논리를 캡슐화하면 더 명확 해집니다.
Eddie

5

손실 또는 부재 개념이없는 값 (음수 값)을 나타내야하는 경우이를 "절대 값"이라고합니다.


절대 값을 얻는 논리는 매우 간단 "If it's positive, maintain it. If it's negative, negate it"합니다.


이것이 의미하는 것은 논리와 코드가 다음과 같이 작동해야한다는 것입니다.

//If value is negative...
if ( value < 0 ) {
  //...negate it (make it a negative negative-value, thus a positive value).
  value = negate(value);
}

값을 부정 할 수있는 두 가지 방법이 있습니다.

  1. 글쎄, 그 가치를 부정하면 : value = (-value);
  2. "100 % 음수"또는 "-1"을 곱하면 : value = value * (-1);

둘 다 실제로 같은 동전의 양면입니다. value = (-value);실제로는 실제로 기억하지 않는다는 것 value = 1 * (-value);입니다.


Java에서 실제로 어떻게하는지에 관해서는 Java가 이미 다음과 같은 기능을 제공하기 때문에 매우 간단합니다 Math class.value = Math.abs(value);

그렇습니다.없이 Math.abs()간단한 작업을 수행하는 것은 매우 간단한 수학 코드 일 뿐이지 만 왜 코드가보기에 좋지 않습니까? Java에서 제공하는 Math.abs()기능을 사용하십시오! 그들은 이유를 제공합니다!

함수를 건너 뛸 필요가 value = (value < 0) ? (-value) : value;있는 경우을? : 사용할 수 있습니다 .Terary 연산자 ( )를 사용하여 논리 (3) 섹션에서 언급 한보 다 간단한 코드 입니다.


또한 양수 값과 음수 값을 모두받을 수있는 함수 내에서 항상 손실 또는 부재를 나타내려는 상황이있을 수 있습니다.

복잡한 검사를 수행하는 대신 절대 값을 가져 와서 무시할 수 있습니다. negativeValue = (-Math.abs(value));


이를 염두에두고 당신과 같은 여러 개의 숫자가있는 경우를 고려하면 함수를 구현하는 것이 좋습니다.

int getSumOfAllAbsolutes(int[] values){
  int total = 0;
  for(int i=0; i<values.lenght; i++){
    total += Math.abs(values[i]);
  }
  return total;
}

관련 코드가 다시 필요할 가능성에 따라 이러한 기능을 자체 "유틸리티"라이브러리에 추가하고 이러한 기능을 핵심 구성 요소로 먼저 분할하고 최종 함수를 호출의 중첩으로 유지하는 것이 좋습니다. 핵심 구성 요소의 현재 분할 기능 :

int[] makeAllAbsolute(int[] values){
  //@TIP: You can also make a reference-based version of this function, so that allocating 'absolutes[]' is not needed, thus optimizing.
  int[] absolutes = values.clone();
  for(int i=0; i<values.lenght; i++){
    absolutes[i] = Math.abs(values[i]);
  }
  return absolutes;
}

int getSumOfAllValues(int[] values){
  int total = 0;
  for(int i=0; i<values.lenght; i++){
    total += values[i];
  }
return total;
}

int getSumOfAllAbsolutes(int[] values){
  return getSumOfAllValues(makeAllAbsolute(values));
}

3

왜 안그래 multiply that number with -1?

이처럼 :

//Given x as the number, if x is less than 0, return 0 - x, otherwise return x:
return (x <= 0.0F) ? 0.0F - x : x;

2

2의 보수의 역학에 관심이 있다면, 여기에는 절대적으로 비효율적이지만 예시적인 저수준 방법이 있습니다.

private static int makeAbsolute(int number){
     if(number >=0){
        return number;
     } else{
        return (~number)+1;
     }
}

왜 비효율적입니까? 비효율적 인 루프가 보이지 않습니다. 내가 뭐 놓친 거 없니?
aldok

2

다음 솔루션을 권장합니다.

lib 재미없이 :

    value = (value*value)/value

(위의 내용은 실제로 작동하지 않습니다.)

lib 재미와 함께 :

   value = Math.abs(value);

14
첫 번째 결과가 다시 음수가 아닌가?
user2875404

1
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());

또는

int i = -123;
System.out.println(Math.abs(i));

1

라이브러리 기능을 Math.abs()사용할 수 있습니다.
Math.abs()인수의 절대 값을 반환

  • 인수가 음수이면 인수의 부정을 리턴합니다.
  • 인수가 양수이면 숫자를 그대로 반환합니다.

예 :

  1. int x=-5;
    System.out.println(Math.abs(x));

출력 : 5

  1. int y=6;
    System.out.println(Math.abs(y));

출력 : 6


1

음수를 양수로 변환하려면 (절대 값이라고 함) Math.abs ()를 사용합니다. 이 Math.abs () 메소드는 다음과 같이 작동합니다

“number = (number < 0 ? -number : number);".

아래 예제 Math.abs(-1)에서 음수 1을 양수 1로 변환합니다.

공개 정적 무효 main (String [] args) {

    int total = 1 + 1 + 1 + 1 + (-1);
    
    //output 3
    System.out.println("Total : " + total);
    
    int total2 = 1 + 1 + 1 + 1 + Math.abs(-1);
    
    //output 5
    System.out.println("Total 2 (absolute value) : " + total2);
    
}

산출

합계 : 3 합계 2 (절대 값) : 5


0

long의 절대 값이 필요했고 Math.abs를 자세히 살펴보고 인수가 LONG.MIN_VAL (-9223372036854775808l)보다 작 으면 abs 함수가 절대 값을 반환하지 않고 최소값 만 반환한다는 것을 알았습니다. 이 경우 코드에서이 abs 값을 더 사용하면 문제가있을 수 있습니다.


4
Long.MIN_VAL의 요점은 "LONG.MIN_VAL보다 작은"길이를 가질 수 없다는 것입니다.
Paul Tomblin

0

이걸 시도해 주시겠습니까?

public static int toPositive(int number) {
    return number & 0x7fffffff;
}

4
17 개의 다른 답변이있는 10 살짜리 질문에서 답변의 새로운 측면을 설명해야합니다. 질문으로 답변을 시작하면 검토 대기열에있는 경우 질문을 닫을 수 있습니다.
Jason Aller


-3

이러지마

숫자 = (숫자 <0--숫자 : 숫자);

또는

만약 (number <0) number = -number;

코드에서 찾기 버그를 실행하면 RV_NEGATING_RESULT_OF로보고됩니다.

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