문제
나는 다른 게시물에,누군가가 수행 같은 것:
double d = 3.1415;
int i = Convert.ToInt32(Math.Floor(d));
그들은 왜를 사용합 변환 기능보다:
double d = 3.1415;
int i = (int)d;
는 암시적 지면과 변환합니다.
또한,더 많은에 관하여,내가 발견에서 생산 코드를 읽고 있었:
double d = 3.1415;
float f = Convert.ToSingle(d);
는 동일:
float f = (float)d;
모두들 그렇지 않으면 암시적 변환을 단지의 변환 등에 대한 완전성,또는 그들은 목적?이해할 수 있습합니다.ToString(),지 않습니다.
해결책
주 int 는 암시적 잘림지,바닥재를 암시적:
double d = -3.14;
int i = (int)d;
// i == -3
내가 선택한 수학이다.층 수학이다.라운드를 기도는 더 분명하게 명시되어 있습니다.
다른 팁
반올림은 또한 다르게 처리:
x=-2.5(int)x=-2 변환합니다.ToInt32(x)=-2
x=-1.5(int)x=-1 변환합니다.ToInt32(x)=-2
x=-0.5(int)x=0 변환합니다.ToInt32(x)=0
x=0.5(int)x=0 변환합니다.ToInt32(x)=0
x=1.5(int)x=1 변환합니다.ToInt32(x)=2
x=2.5(int)x=2 변환합니다.ToInt32(x)=2
통 x=-1.5 및 x=1.5 경우입니다.
에서 알고리즘 반올림하는 데 사용되는 방법에 중요한 다른 대답이다.
당신이 사용할 수 있습으로 변환할 때가는 문자열로 변환할 int
int i = Convert.ToInt32("1234");
변환하고 캐스팅을 것이 모두 예외를 던지는 경우 그들은 실패합니다.
i.e 이것은 여전히 던지는 예외는 아니다,그 반환하지 않습니다 0:
Convert.ToInt32("1234NonNumber");
많은 경우에 변환 및 주물이 동일한 결과를 얻을 수 있다,하지만 캐스팅은 종종 쉽게 읽을 수 있습니다.
변환합니다.ToInt32()를 사용한 문자열에(http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx)동안 캐스팅에서만 사용할 수 있는 형식의 내부 컨버터(숫자 형식).진짜 속에서 오는 사이에 결정 Int32.분석하고 변환합니다.ToInt32().변환합니다.ToInt32()관용의 null 과 0 을 반환합니다 동안 Int32.Parse()을 던져 ArgumentNullException.