2016-11-22 3 views
-1

알다시피,이 사이트에는 수십 가지 주제가 있지만 3 가지 문제에 문제가 있으며 동시에 모든 것을 파악할 수 없습니다.Java BigDecimal 문제 (문자열을 BigDecimal로 - BigDecimal을 String으로)

실제로, 에 대한 계산기를 만들려고합니다. 가끔은 내가 기대 한 것을 얻을 수 없습니다.

내 코드의 일부입니다.

}else if(operator.equals("/")){ 

      if(resultScreen.indexOf("/")==0){ 
       strNum2 = resultScreen.substring(resultScreen.indexOf("/")+1,resultScreen.length()); 
       intNum1 = result; 
      }else{ 
       strNum1 = resultScreen.substring(0,resultScreen.indexOf("/")); 
       strNum2 = resultScreen.substring(resultScreen.indexOf("/")+1,resultScreen.length()); 
       intNum1 = new BigDecimal(strNum1); 
      } 

      intNum2 = new BigDecimal(strNum2); 


      if(intNum2.equals(0)){ 
       tvScreen.setText("Err"); 
       resultScreen =""; 
      }else{ 
       result = intNum1.divide(intNum2); 

       resultScreen = result.toString(); 

       tvScreen.setText(resultScreen); 
       resultScreen =""; 
      } 
     } 

내가 시도하면;

7분의 22

그것은 온다;

3

나는 어떻게 해결할 수 있습니까?

그런데 십진수의 정확한 값을 유지하고 싶습니다.

+0

나누기에 대한 javadoc을 읽으십시오. https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html (https://ideone.com/Fd197W 참조) –

+0

I 그것의 사본을 생각하십시오. http://stackoverflow.com/questions/4591206/arithmeticexception-non-terminating-decimal-expansion-no-exact-representable – msagala25

답변

2

BigDecimal a = new BigDecimal("22"); 
    BigDecimal b = new BigDecimal("3"); 
    BigDecimal res = a.divide(b, 2, RoundingMode.HALF_UP); 
    System.out.println(res); 

중요한 것은 값이 정확히 예외가 발생합니다 표시 할 수없는 경우 그 밖에 roundingMode가있을 것입니다 작동합니다.

+0

BigDecimal res = a.divide (b, 9, BigDecimal.ROUND_HALF_UP); 더 좋습니다. 고맙습니다. –