음수를 양수로 만드십시오


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.