2017-12-26 13 views
0
public static int applyOp(char op, int b, int a) { 
    switch (op) { 
     case '+': 
      return a + b; 
     case '-': 
      return a - b; 
     case '*': 
      return a * b; 
     case '%': 
      return a % b; //But this doesn't work properly. 
     case '/': 
      if (b == 0) 
       throw new 
         UnsupportedOperationException("Cannot divide by zero"); 
      return a/b; 
    } 
    return 0; 
} 

} 

100 * 10 + 2, 525 + 5 %, 525 * 5 %를 사용하여 시도했지만 다른 연산자가 제대로 작동하지만 '%'는 사용하지 않습니다.전체 입력을 문자열로 취하는 계산기의 백분율을 계산하는 방법은 무엇입니까?

+0

'%'는 모듈러스 연산자이므로 퍼센트 계산에 사용할 수 없습니다. 모든 연산자가 제대로 작동하고 빠른 해결책을 원한다면 문자열을'%'대신'/ 100' (즉,'525 * 5 %'는'525 * 5/100'가됩니다)으로 처리 할 수 ​​있습니다 - * 정수 구분 ! * – BackSlash

+0

어떤 식으로 작동하지 않습니까? * "적절하게"*? 어떤 방식으로 오작동하는지 확인하기 위해 디버깅을 한 적이 있습니까? – luk2302

+1

'17 % 5'에 대한 출력은 무엇입니까? – dasblinkenlight

답변

1
public static int applyOp(char op, int b, int a) { 
    switch (op) { 
     case '+': 
      return a + b; 
     case '-': 
      return a - b; 
     case '*': 
      return a * b; 
     case '%': 

      return (int)(((float) a/b) * 100); 
     case '/': 
      if (b == 0) 
       throw new 
         UnsupportedOperationException("Cannot divide by zero"); 
      return a/b; 
    } 
    return 0; 
} 

} 

b

0

% 오퍼레이터에 의해 분할 a 대한 modulus [나머지] 반환 % 사용 중 알림하지 백분율 계산한다. 당신이 '? 몇 퍼센트하는 ba는'계산하려면

, 당신은이 같은 것을 사용할 수 있습니다

(int) (((float) a/b) * 100) 

당신은 (대신 정수 나누기의 포인트 부문 부동 사용하는 float에 캐스트 할 필요가 즉 또 다른 옵션 (100)

곱 전에 느슨한 정밀도) 단지 a/b을 위해 사용되는 첫 번째 곱하는 것입니다 :

a * 100/b 

그러나 여기서 a 크기가 클 경우 잠재적으로 정수 오버플로가 발생할 수 있습니다.