Looking for java Keywords? Try Ask4Keywords

Java Language Математические операции с BigDecimal


пример

В этом примере показано, как выполнять основные математические операции с помощью BigDecimals.

1.Addition

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a + b
BigDecimal result = a.add(b);
System.out.println(result);

Результат: 12

2.Subtraction

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a - b
BigDecimal result = a.subtract(b);
System.out.println(result);

Результат: 2

3.Multiplication

При умножении двух BigDecimal s результат будет иметь масштаб, равный сумме шкал операндов.

BigDecimal a = new BigDecimal("5.11");
BigDecimal b = new BigDecimal("7.221");

//Equivalent to result = a * b
BigDecimal result = a.multiply(b);
System.out.println(result);

Результат: 36.89931

Чтобы изменить масштаб результата, используйте метод перегруженного множителя, который позволяет передавать MathContext - объект, описывающий правила для операторов, в частности, режим точности и округления результата. Дополнительные сведения о доступных режимах округления см. В документации Oracle.

BigDecimal a = new BigDecimal("5.11");
BigDecimal b = new BigDecimal("7.221");

MathContext returnRules = new MathContext(4, RoundingMode.HALF_DOWN);

//Equivalent to result = a * b
BigDecimal result = a.multiply(b, returnRules);
System.out.println(result);

Результат: 36.90

4.Division

Разделение немного сложнее, чем другие арифметические операции, например, рассмотрим приведенный ниже пример:

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

BigDecimal result = a.divide(b);
System.out.println(result);

Мы ожидаем, что это даст нечто похожее: 0.7142857142857143, но мы получим:

Результат: java.lang.ArithmeticException: Неограничивающее десятичное расширение; нет точного представимого десятичного результата.

Это будет отлично работать, когда результат будет завершающим десятичным, скажем, если бы я хотел разделить 5 на 2, но для тех чисел, которые при делении будут давать не заканчивающийся результат, мы получим ArithmeticException . В сценарии реального мира невозможно предсказать значения, которые будут встречаться во время деления, поэтому нам нужно указать масштаб и режим округления для деления BigDecimal. Для получения дополнительной информации о режиме масштабирования и округления см. Документацию Oracle .

Например, я мог бы сделать:

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a / b (Upto 10 Decimal places and Round HALF_UP)
BigDecimal result = a.divide(b,10,RoundingMode.HALF_UP);
System.out.println(result);

Результат: 0.7142857143

5.Remainder или модуль

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = a % b
BigDecimal result = a.remainder(b);
System.out.println(result);

Результат: 5

6.Power

BigDecimal a = new BigDecimal("5");

//Equivalent to result = a^10    
BigDecimal result = a.pow(10);
System.out.println(result);

Результат: 9765625

7.Max

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = MAX(a,b) 
BigDecimal result = a.max(b);
System.out.println(result);

Результат: 7

8.Min

BigDecimal a = new BigDecimal("5");
BigDecimal b = new BigDecimal("7");

//Equivalent to result = MIN(a,b) 
BigDecimal result = a.min(b);
System.out.println(result);

Результат: 5

9. Переместите точку влево

BigDecimal a = new BigDecimal("5234.49843776");

//Moves the decimal point to 2 places left of current position
BigDecimal result = a.movePointLeft(2);
System.out.println(result);

Результат: 52.3449843776

10.Переведите точку вправо

BigDecimal a = new BigDecimal("5234.49843776");

//Moves the decimal point to 3 places right of current position
BigDecimal result = a.movePointRight(3);
System.out.println(result);

Результат: 5234498.43776

Существует множество дополнительных параметров и комбинаций параметров для вышеупомянутых примеров (например, существует 6 вариантов метода разделения), этот набор является неисчерпывающим списком и охватывает несколько базовых примеров.