[C#] 분수 손실 가능성

이것이 순진한 질문이라면 저를 용서하십시오. 그러나 나는 오늘 당황합니다.

다음과 같은 간단한 나눗셈 계산이 있습니다.

double returnValue = (myObject.Value / 10);

값은 개체의 정수입니다.

가능한 분수 손실 가능성이라는 메시지를 받았습니다. 그러나 double을 int로 변경하면 메시지가 사라집니다.

왜 이런 일이 일어날 지에 대한 생각이 있습니까?



답변

두 개의 int를 부동 소수점 값으로 나누면 분수 부분이 손실됩니다. 항목 중 하나를 부동으로 캐스팅하면이 오류가 발생하지 않습니다.

예를 들어 10을 10.0으로 바꿉니다.

double returnValue = (myObject.Value / 10.0);


답변

myObject.Value양쪽 /이 정수 유형 이기 때문에 int 인 경우 정수 나누기를 수행 합니다.

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

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;


답변

정수로 나눈 정수는 정수를 반환합니다. Value를 double로 캐스트하거나 10.0으로 나눕니다.


답변

그 가정 myObject.Valueint, 방정식은 myObject.Value / 10다음 번에 전송할 것이다 정수 분할 될 것이다.

MyObject.Value에 12 되에 ReturnValue는 1이되고 초래할 것이라는 것을 의미 하지 1.2.

먼저 값을 캐스팅해야합니다.

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

이것은 올바른 값 1.2를 초래할 것입니다. 적어도 두 배가 그들의 한계를 감안할 때 허용하는만큼 정확하지만 그것은 거의 끝없이 SO의 다른 곳에서 논의됩니다 :-).


답변

myObject가 int이므로

double returnValue=(myObject.Value/10.0); 


답변