2016-11-22 7 views
-1

Я знаю, что на сайте есть такие темы, как это на сайте, но у меня проблемы с 3 проблемами, и я не мог разобраться с ними в одно и то же время.Java BigDecimal Problems (String to BigDecimal - BigDecimal to String)

На самом деле, я пытаюсь сделать калькулятор для 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 о divide: 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); это улучшается. Спасибо. –