2013-06-15 3 views
-1

"int total = (mark/overall) * 100;"이 아닌 이유는 무엇입니까? 일? 25/50을 입력 한 후 25/50 * 100을 계산 한 후 50 %가되어야합니다. 그러나 0 %가 표시되어 매우 이상합니다. 어떤 제안 ??간단한 수학이 예상대로 표시되지 않습니까?

public class MarksCalculator { 
     private static Scanner kb = new Scanner(System.in); 

     public static void main (String[]args) { 

      int mark = 0, overall = 0; 

      //System.out.print("Hello Deepo! To calculate the marks enter value (percantage) of the task: "); 
      //int weight = kb.nextInt(); 

      System.out.print("Enter your marks for this Task/Assesment/Test: "); 
      mark = kb.nextInt(); 

      System.out.print("What was this mark out of: "); 
      overall = kb.nextInt(); 

      int total = (mark/overall) * 100; 

      System.out.println("You have scored " + total + "% with this assesment."); 
} 
} 
+4

25/50 때문에이 int' 계산'0입니다. 한 쪽을 두 배로 캐스팅합니다 (다른 쪽은 암시 적으로 캐스팅됩니다). – Maroun

답변

2

부동 점을 피하려면 (왜?), 당신은 또한 요소의 순서를 변경 할 수 있습니다

int total = 100 * mark/overall; 
+0

그것은 작동하지만 이상입니다. 좋은 이유가 있다면 왜/전체 * 100을 표시하지 않겠습니까? – Shuvo0o

+0

@ Shuvo0o'mark/overall'는 먼저 0으로 평가 될 것이기 때문에 100으로 곱하면 0이 될 것입니다. – Maroun

+0

아, 괜찮습니다. 감사! – Shuvo0o

3

당신은 더블 캐스팅해야합니다

double total = ((double)mark/overall) * 100; 

Chapter 15에서 :

승격 된 유형은 int 또는 long의 경우, 정수 연산은 이 수행됩니다.

+0

JLS에서 "정수 산술"은 정확히 정의되어 있습니까? – ingyhere

+0

@ingyhere http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17 (15.17.2 참조) –

+0

예, 알았습니다. "승격 된 형식이 int 또는 long 인 경우 정수 계산이 수행됩니다." 그러나 '정수 연산'에 대한 참조 또는 명시 적 정의를 제공하지 않거나 찾을 수 없습니다. 나는 그것이 무엇인지 알 것 같지만 JLS가 크 누스 또는 다른 것에 대한 언급을 제공하지 않는다는 것에 놀랐습니다. – ingyhere

관련 문제