inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

오버로딩

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

190

dlckddh333

작성한 질문수 5

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 형식으로 바꿀 수 없다하여 캐스트를 달라고 오류 뜨더라구요.
워낙 기초가 없는지라 알트 엔터 도움을 받아서 위와같이 변경했는데 왜 오류가 떳는지 그리고 위와같이 해결이 되는건지 알려주실 수 있나요?

캐스트 C#

답변 1

1

Rookiss

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부분이 손실될 것입니다.

0

dlckddh333

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

0

Rookiss

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

Generic에 대한 질문 있습니다.

0

113

2

2022 버전에 커뮤니티 버전이 없는데 2026 버전으로 해도 무관?

0

226

2

다형성 캐시 문제

0

136

3

.

0

77

1

프로퍼티 강의 질문 있습니다.

0

85

1

이후 커리 질문

0

91

1

static

0

102

2

강의에는 새로운 클래스 파일을 생성하면...

0

80

1

생성자의 이름 선언

0

68

1

9:03 Divide(10 , 3) 부분 질문입니다

0

93

1

깃허브 관련 질문 있습니다.

0

248

1

비쥬얼 스튜디오 업데이트가 된건가요..? 매개변수 오류 관련 질문

0

258

1

C# 시리즈 || C++ 시리즈 자료구조 강의에 대한 질문입니다!

0

311

2

Activator 질문있습니다

0

343

1

이넘 타임 선언 질문

0

358

1

Sort 오름차순, 내림차순

0

333

1

질문 있습니다.

0

254

1

팩토리얼 문제

0

277

1

Sort함수 질문있습니다.

0

271

1

다형성 함수 질문 있습니다.

0

231

1

질문이 있습니다.

0

236

1

섹션2 연습문제 질문입니다.

0

222

1

안녕하세요~서버에 대해 질문이 있습니다.

1

288

1

텍스트 색깔이 제 편집기와 달라서 수강에 어려움이 있습니다ㅜㅜ

0

401

1