이 코드를 작성했습니다.
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);
}