class Solution {
public int solution(int num1, int num2) {
double answer = (double)num1/(double)num2*1000;
return (int)answer;
}
}
🐰 (double)(num1/num2)*1000
으로 코드를 작성했는데 원하는 답이 나오지 않았다.
혹시나 해서 num1, num2에 각각 형변환을 해줬더니 답이 나왔다.
🐰 왜 원하는 답과 다르게 나왔었는지 찾아보았는데 연산 순서와 형변환의 차이 때문이였다.
(double)(num1/num2)
: num1/num2를 먼저 계산하고 그 결과를 정수로 형변환한 다음에 double로 다시 형변환한다. 그래서 정수 나눗셈의 결과를 형변환하여 소수점 이하의 값을 잃어버리게 된다.
(double)num1/num2
: num1을 먼저 double로 형변환한 다음에 num2와 나눗셈을 수행한다. num1이 double로 형변환되어 소수점 이하의 값을 유지할 수 있다.
(double)num1/(double)num2
: num1과 num2를 double로 형변환한 다음 나눗셈을 수행한다. 때문에 소수점 이하의 값을 유지할 수 있다.
🐰 답이 다르게 나온 이유를 찾다가 (double)num1/num2
이렇게 만든 코드도 보았다. 한가지 문제에 여러 사람들의 생각에 따라서 여러 답이 나온다는게 너무 신기했다.