2017-04-21 2 views
-1

두 개의 정수 매개 변수가 있습니다.이 매개 변수를 나누고 그 결과를 부동 변수에 저장합니다.정수 매개 변수의 나누기 부동 소수점 값 반환

img.width=2620 refsize.width=1499 

KX를 변수로 수학 정상 ~1.747831887925284 반환해야하는 문제의 예를 촬영

float kx=(float)(img.Width/refsize.Width); 

. 왜 이런 일이

하지만 정수 kx=1

로 반올림 계속입니까? 두 개의 int 치의을 분할하기 때문에

+1

명시 적으로 나누기에서 부동을 지정해야합니다. 그렇지 않으면 정수 나누기가됩니다. – dcg

+0

@dcg 감사합니다 ..... – techno

답변

1

float kx=(float)(img.Width/refsize.Width); 

첫번째 작업의 순서에 내려 오는 시도를 float로 (정수 1 인)

img.Width/refsize.Width 

후 결과를 캐스트 평가합니다.

예상 결과를 얻으려면 두 개의 너비를 나누기 전에 float로 모두 캐스팅하십시오 (기술적으로는 둘 중 하나를 캐스팅 할 수 있고 컴파일러는 다른 것을 승격시킬 수 있지만 명시 적으로 선호합니다.) 코드 해를 누가 유지할 것인지 결코 알 수 없습니다 도로). 괄호 우선 순위를 가지고 있기 때문에

float kx=(float)img.Width/(float)refsize.Width; 
1
float kx=(img.Width/(float)refsize.Width); 

그것은 발생하고 그 결과는

0

그것은 정수 나 (DivideByZeroException) 정수에 의해 때문에 먼저 분할 정수를 발생 떠 캐스트 INT이다. 그리고 정수 결과를 float으로 변환합니다.

float kx = (((float)img.Width)/refsize.Width);

0

, 당신은 올바른 결과를 얻을 수

float kx = (float)img.Width/(float)refsize.Width; 

를 작성해야 당신은 정수의 정수로 나눈하고 당신은 결과 1. 얻을.