Этот код умрет от ужасной смерти, если деление имеет неограничивающее десятичное расширение. См Javadoc из divide(BigDecimal divisor)
:
если точный фактор не может быть представлен (потому что он имеет не завершающее десятичное разложение) ArithmeticException
отбрасываются.
Пример:
BigDecimal one = BigDecimal.ONE;
BigDecimal x = BigDecimal.valueOf(7);
one.divide(x); // throws java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
Используйте один из других перегрузок divide()
, например, divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
:
BigDecimal one = BigDecimal.ONE;
BigDecimal x = BigDecimal.valueOf(7);
BigDecimal quotient = one.divide(x, 5, RoundingMode.HALF_UP);
System.out.println(quotient); // prints: 0.14286
BigDecimal one = BigDecimal.ONE;
BigDecimal x = BigDecimal.valueOf(7);
BigDecimal quotient = one.divide(x, 30, RoundingMode.HALF_UP);
System.out.println(quotient); // prints: 0.142857142857142857142857142857
Используйте форматирование чисел для вывода 'BigDecimal' по вашему желанию. –
Вы можете захотеть взглянуть на это http://stackoverflow.com/questions/3395825/how-to-print-formatted-bigdecimal-values – Bobert
Попробуйте использовать метод '.setScale()'; внимательно прочитайте javadoc, хотя – fge