2016-03-31 2 views
0

Я новичок в мире Java и пытаюсь научиться использовать BigDecimal. То, что я пытаюсь сделать сейчас, - ограничить число десятичных знаков в задаче деления. Моя строка кода:Пытается ограничить число десятичных знаков для BigDecimal деления Java

quotient=one.divide(x); 

Где фактор, один и x - все типа BigDecimal. Однако я не могу понять, как ограничить количество десятичных знаков для распечатки, заявив, что x - некоторое большое число, а одно равно 1. Вся помощь приветствуется, спасибо!

+0

Используйте форматирование чисел для вывода 'BigDecimal' по вашему желанию. –

+1

Вы можете захотеть взглянуть на это http://stackoverflow.com/questions/3395825/how-to-print-formatted-bigdecimal-values ​​ – Bobert

+1

Попробуйте использовать метод '.setScale()'; внимательно прочитайте javadoc, хотя – fge

ответ

0

Этот код умрет от ужасной смерти, если деление имеет неограничивающее десятичное расширение. См 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 
0

Чтобы установить количество знаков после запятой в переменной BigDecimal вы можете использовать следующие предложения зависит, что вы хотите достичь

value = value.setScale(2, RoundingMode.CEILING) делать «вырезать» часть после того, как 2-х знаков после запятой

или

value = value.setScale(2, RoundingMode.HALF_UP) сделать общий круглый

См. Rounding BigDecimal to *always* have two decimal places

Смежные вопросы