2012. 3. 28. 12:28

닷넷에서는 몇 가지 형변환 방법이 있는데 그중 괄호로 사용하는 캐스팅 방법은 다른 언어에서도 사용하는 방법이고 이전부터 사용하던 방법입니다.

 

예>

예>
object oTemp = new object();
oTemp = 3.0;
dTest = (double)oTemp;

 

 

1. 문제의 발견

그런데 형 변환을 하다가 이상한 에러를 발견하였습니다.

'object'형을 'float'로 캐스팅을 하니 에러가 빵~

 

object oTemp = new object();
oTemp = 3.0;

double dTest = 1.0;
float fTest = 1.0f;

dTest = (double)oTemp;
fTest = (float)oTemp;

지정한 캐스트가 잘못되었습니다.

흠?

오류의 말은 써있는 데로

"형변환이 안 되니 확인해 봐라"

입니다.

 

원래 'double'형은 'float'형으로 변환에 이상이 없다는 것을 생각해보면 이상하다고 할 수 있죠.

(역으로 변환할 때는 오류 생깁니다.)

 

그래서 해당 자료를 찾아보니 버그라는 소리도 있고....

잉?

 

 

2. 해결 방법

간단하게 해결하는 방법은 'double'형으로 바꾼 후 'float'로 바꾸면 됩니다.

object oTemp = new object();
oTemp = 3.0;

double dTest = 1.0;
float fTest = 1.0f;

dTest = (double)oTemp;
fTest = (float)dTest;
//fTest = (float)oTemp;

이렇게 말이죠.

 

물론

fTest = (float) Convert.ToDouble( oTemp);
fTest = (float)(double)oTemp;

이렇게 써도 됩니다.

 

 

마무리

이것도 많이 쓰는 것일 텐데 왜 .NET에 구현돼있지 않은 걸까요?