2012. 3. 28. 12:28

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

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


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

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형으로 변환에 이상이 없다는 것을 생각해보면 이상하다고 할수 있죠.(역으로 변환할때는 오류 생깁니다.)
그래서 해당 자료를 찾아보니 버그라는 소리도 있고
잉?

여튼 간단하게 해결하는 방법은 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;

이런 방법들도 가능합니다.



  1. Favicon of http://thankee.tistory.com BlogIcon thankee 2012.03.28 13:15  Address  Edit/Delete  Reply

    최초에 oTemp=3.0;이라고 하셨는데..
    C#에서는 '3.0' 이라는 부동소수점 상수를 기본적으로 double로 생성하잖아요.. 그래서 제 생각에는 double로 생성된 object를 float로 형변환하려고 하니 에러가 나는 게 아닐까 생각합니다.

    크기가 큰 변수를 작은 변수로 형변환하는 것은, 명시적 캐스팅을 하는 방법밖에 없는데... c#에서 double type를 float type으로 변경하는 것은 내부적으로 처리되도록 되어있으나... double를 담고있는 object를 float로 바꾸는 것은 미처 처리로직이 없는 것이 아닌가.. 따라서 에러가 나는 것이 아닐까 생각이되네요..

    아무튼 좋은 정보하나 배웠네요..^^

댓글 작성

이름
패스워드
홈페이지
비밀글