2016-11-22 183 views
-1

我知道,這裏有幾十個這樣的話題,但我在3個問題上遇到了問題,我無法同時找出所有這些問題。Java BigDecimal問題(字符串到BigDecimal - BigDecimal字符串)

其實,我想爲Android做一個計算器,但有時我不能得到我所期望的。

我的部分代碼是;

}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 =""; 
      } 
     } 

當我嘗試;

22/7

它配備了;

我該如何解決呢?

順便說一下,我想保留十進制的確切值。

+0

請閱讀有關鴻溝的javadoc:https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html(參見https://ideone.com/Fd197W) – 2016-11-22 06:37:31

+0

認爲它是重複的。 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); 這使得更好。謝謝。 –