• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

캐스트 다는 것 관련해서 질문드립니다.

22.02.09 22:02 작성 조회수 115

0

static int add(int a, int b, int c = 0, float d = 2.0f, double e = 3.0)
{
return (int)(a + b + c + d + e);
}
 
static void Main(string[] args)
{
int tem = Program.add(1, 2, d:3.0f, e:4.0); Console.WriteLine(tem);
}
 
위의 add함수 내용중에 return (int)(a + b + c + d + e);를 처음에는
그냥 return a + b + c + d + e;
로 적었거든요. 그랬더니 double 형식을 int 형식으로 바꿀 수 없다하여 캐스트를 달라고 오류 뜨더라구요.
워낙 기초가 없는지라 알트 엔터 도움을 받아서 위와같이 변경했는데 왜 오류가 떳는지 그리고 위와같이 해결이 되는건지 알려주실 수 있나요?

답변 1

답변을 작성해보세요.

1

return a+b+c+d+e; 를 할 때
a, b, c, d, e 모두 동일한 int 타입알면 a+b+c+d+e도 int를 반환합니다.
그러나 int -> float ->  double 순서로 표현 범위가 넓고 우선순위가 높기 때문에
a,b,c,d,e 중 일부는 int, 일부는 float, double이라면
최종 결과물은 double 타입이 됩니다.

int add(...) 함수의 반환은 int 타입이라 지정했는데
실제로 double을 뱉어주니 뭔가 앞뒤가 안 맞아 불평을 하는 것이죠.
하신 것처럼 그 상황이 의도한 상황이라고 (int) 캐스팅을 해주면 에러가 사라지지만,
만약에 3.14와 같은 소수점이었다면, .14부분이 손실될 것입니다.

dlckddh333님의 프로필

dlckddh333

질문자

2022.02.14

그럼 위의 add함수 매개변수목록 중 가장 큰 값에 해당하는 double값에 맞추어 반환형식을 int에서 double로 바꿔서 함수를 만들면 해결되는 걸까요??

네 그런데 사실 이 부분은 정답이 있다기 보단 함수의 의도가 중요합니다.
정말 소수점은 제거하고 정수만 반환하는게 목적이었다면,
지금 이 상태가 맞는 것이겠죠.