2014-01-22 1 views
1
int p = 6; 
System.out.println(_nums.size() + ", " + p); 

64, 6 

왜 012 대신에 이 0.9 대신 0.0입니까?나누기 후 이중 매개 변수는 0.0과 같습니다.

double result = (_nums.size() - p)/_nums.size(); 
+4

정수부. –

+0

비 정수 나누기 사용 방법은 무엇입니까? –

+1

'(_nums.size() - p)/_ nums.size() 표현식 전체의 타입은'int'입니다. 그런 다음 그것을 double에 할당합니다. '(_nums.size() - (double) p)/_ nums.size()'만큼 피연산자를'double'으로 일찍 변환해야합니다. –

답변

3

는 당신이 현재하고있는 것은 정수를 나누어 그대로 동일하며, 그 결과를 double에 캐스팅합니다. 그래서 작업이 지금이 바로 같은 동일합니다 : 당신이 분할 전에

int intermediate = ((_nums.size() - p)/_nums.size()); // This can only be an int (e.g. 0). 
double result = (double) intermediate; // Now this is just the double value of that int (0.0). 

정수와 "true"로 구분하려면, 단지 double에 그들 중 하나를 캐스팅. 이렇게하면 부동 소수점 (double) 입력이 있으므로 나누기 연산에 부동 소수점 산술을 사용하게합니다.

double result = (_nums.size() - p)/((double) _nums.size()); 
1

당신은 너무

double result = ((_nums.size() - p)/((double)_nums.size())); 
1
double result = (_nums.size() - p)/_nums.size(); 

같은 부동 소수점 연산의 사용을 강제하는 것은

double result = (double) (int)(_nums.size() - p)/ (int) _nums.size(); 
which equals 
     =(double) 6/64; 
     =(double) 0 
     =0.0 
+0

, 0.9이 되려면 Henry Keiter가 말하는 것처럼해야합니다. – TheLostMind