2009-06-30 4 views
100

오늘은 순진한 질문이지만 용서해주십시오.분수 손실 가능성 있음

double returnValue = (myObject.Value/10); 

값은 오브젝트의 int이며 다음과 같은

I는 단순한 분할 계산을 갖는다.

가능한 분수 손실 메시지가 표시됩니다. 그러나 double을 int로 변경하면 메시지가 사라집니다.

왜 이런 일이 발생할지 생각해보십시오. 당신은 부동 소수점 값으로 두 INT의의를 나눌 때 내가 myObject에 있기 때문에 생각

+0

대단히 감사합니다. 이제 2 개의 int 값을 나눌 때 소수점을 잃어 버리는 것은 당연합니다. – CodeLikeBeaker

답변

138

소수 부분은 손실됩니다. 항목 중 하나를 부동으로 캐스팅하면이 오류가 발생하지 않습니다. /의 양쪽 정수 타입이기 때문에

그래서 예를 들어, myObject.Value이 INT 인 경우 당신은 정수 나누기를하고있는 10.0

double returnValue = (myObject.Value/10.0); 
3

는 int이며 당신은

double returnValue=(myObject.Value/10.0); 
51

로 (10)를 설정합니다.

부동 소수점 나누기를 수행하려면 표현식의 숫자 중 하나가 부동 소수점 유형이어야합니다. myObject.Value가 double이거나 다음 중 하나이면 true입니다.

double returnValue = myObject.Value/10.0; 
double returnValue = myObject.Value/10d; //"d" is the double suffix 
double returnValue = (double)myObject.Value/10; 
double returnValue = myObject.Value/(double)10; 
6

정수를 정수로 반환합니다. Value를 double로 변환하거나 10.0으로 나눕니다.

6

myObject.Valueint이라고 가정하면 방정식 myObject.Value/10은 두 배로 캐스팅 될 정수 부분이됩니다.

즉, myObject.Value가 12이면 returnValue가 1이되고, 이 아닌 것은 1.2가됩니다. 복식은 자신의 한계를 주어진 수 있지만,이 SO에 다른 곳에서 논의 된 것 거의,

double returnValue = (double)(myObject.Value)/10.0; 

이 올바른 값 1.2에서 적어도 올바른 결과 것 :

은 먼저 값 (들)을 주조 할 필요가 끝없이 :-).