2013-03-26 4 views
1
public class test { 
    public static void main(String[] args) { 
    int total = 2; 
    int rn = 1; 
    double rnp = (rn/total) * 100; 
    System.out.println(rnp); 
} 
} 

50.0 대신 0.0을 인쇄하는 이유는 무엇입니까? 분할 분수없이 개념과 정수 공간에서 발생Java 산술 부서

https://www.google.com/search?q=100*(1%2F2)&aq=f&oq=100*(1%2F2)

+0

왜냐하면 '1/2'는 정수 나누기에서 0이기 때문입니다. – corsiKa

+0

가능한 복제본은 [Java 부문에서 항상 0이됩니다.] (http://stackoverflow.com/questions/10455677/division-in-java-always-results-in-zero-0) –

+1

수도 있습니다. 대답을 고려하면 [C 프로그래밍 부문] (http://stackoverflow.com/questions/8906722/c-programming-division)의 중복을 고려하십시오. – corsiKa

답변

7

, 당신은 당신은 0에 가까워 여기

(rn/total) 

정수 나누기 라운드 정수 나누기를 호출 할

double rnp = (rn/(double) total) * 100 
2

같은 뭔가가 필요 .

대신을 시도해보십시오

double rnp = ((double)rn/total) * 100; 
+1

가까이보세요. 출연진은 출품작 앞에 있습니다. – Kyurem

+0

@Johan,이 장소의 캐스트가 여전히 작동합니다. – rgettman

+0

관찰을 위해 당신의 눈을 밝힙니다. –

0
자바에서

, 대부분의 다른 프로그래밍 언어, 두 개의 정수를 나눌 때, 그 결과는 정수입니다. 나머지는 버려집니다. 따라서 1/20을 반환합니다. float 또는 double 값을 반환하려면 1 * 1.0/2과 같은 작업을 수행해야하며 0.5이 반환됩니다. 정수를 double 또는 float로 곱하거나 나누면 해당 형식으로 변환됩니다.

0
public class test 
{ 
    public static void main(String[] args) 
    { 
    int total = 2; 
    int rn = 1; 
    double rnp = (rn/(float)total) * 100; 
    System.out.println(rnp); 
} 
}