[java] 정수 나누기 : 왜 1/3 == 0의 결과입니까?

이 코드를 작성했습니다.

public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

결과는 0입니다.이 이유는 무엇이며이 문제를 어떻게 해결합니까?



답변

두 피연산자 (1 및 3)는 정수이므로 정수 산술 (여기서 나누기)이 사용됩니다. 결과 변수를 double로 선언하면 나눗셈 후에 암시 적 변환이 발생합니다 .

물론 정수 나눗셈은 0으로 반올림 된 나눗셈의 실제 결과를 반환합니다. 따라서의 결과는 0.333...여기서 0으로 내림됩니다. (프로세서는 실제로 반올림을 수행하지 않지만 여전히 그렇게 생각할 수 있습니다.)

또한 피연산자 (숫자)가 모두 실수로 제공 되는 경우에도 유의하십시오 . 3.0 및 1.0 또는 첫 번째 , 부동 소수점 산술이 사용되어 0.333....


답변

1/3 양쪽이 정수이므로 정수 나눗셈을 사용합니다.

이 중 하나 이상이 float또는이 (가) 필요 double합니다.

질문과 같이 소스 코드에 값을 입력하는 경우 다음을 수행 할 수 있습니다 1.0/3. 는 1.0두 번이다.

다른 곳에서 값을받을 경우 사용할 수 (double)을 설정하는 int으로 double.

int x = ...;
int y = ...;
double value = ((double) x) / y;


답변

명시 적으로 double

double g = 1.0/3.0

이것은 자바의 정수 나눗셈 연산을 사용하기 때문에 발생 1하고 3당신은 정수 상수로 입력하기 때문이다.


답변

당신은 사용해야합니다

double g=1.0/3;

또는

double g=1/3.0;

정수 나누기는 정수를 반환합니다.


답변

정수 나누기를하고 있기 때문입니다.

@Noldorin이 말했듯이 두 연산자가 모두 정수이면 정수 나누기가 사용됩니다.

결과 0.33333333은 정수로 나타낼 수 없으므로 정수 부분 (0) 만 결과에 할당됩니다.

연산자 중 하나가 double/ float이면 부동 소수점 산술이 수행됩니다. 하지만 그렇게하면 동일한 문제가 발생합니다.

int n = 1.0 / 3.0;


답변

1과 3을 정수로 처리하므로 결과를 0으로 반올림하여 정수가됩니다.

원하는 결과를 얻으려면 숫자가 다음과 같이 두 배라는 것을 명시 적으로 Java에 알려주십시오.

double g = 1.0/3.0;


답변

1을 부동으로 만들고 부동 분할이 사용되도록합니다.

public static void main(String d[]){
    double g=1f/3;
    System.out.printf("%.2f",g);
}