Класс BigDecimal

Все реализованные интерфейсы:
Serializable, Comparable<BigDecimal>
public class BigDecimal
extends Number
implements Comparable<BigDecimal>

Неизменяемые десятичные числа произвольной точности со знаком. Объект BigDecimal состоит из целого числа произвольной точности немасштабированного значения и 32-битного целого числа масштаба. Если масштаб равен нулю или положителен, он представляет количество цифр справа от десятичной точки. Если масштаб отрицателен, немасштабированное значение числа умножается на десять в степени, равной модулю масштаба. Значение числа, представленного объектом BigDecimal, поэтому равно (unscaledValue × 10-scale).

Класс BigDecimal предоставляет операции для арифметических вычислений, изменения масштаба, округления, сравнения, хеширования и преобразования формата. Метод toString() обеспечивает каноническое представление объекта BigDecimal.

Класс BigDecimal предоставляет пользователю полный контроль над поведением округления. Если режим округления не задан, а точный результат не может быть представлен, выбрасывается исключение; в противном случае вычисления могут выполняться с заданной точностью и режимом округления, передавая соответствующий объект MathContext в операцию. В любом случае предоставляется восемь режимов округления. Использование целочисленных полей в этом классе (например, ROUND_HALF_UP) для представления режима округления устарело; следует использовать перечисления класса RoundingMode enum (например, RoundingMode.HALF_UP).

При использовании объекта MathContext с настройкой точности 0 (например, MathContext.UNLIMITED), арифметические операции являются точными, как и арифметические методы, которые не принимают объект MathContext. (Это единственное поведение, которое поддерживалось в версиях до 5.) Как следствие вычисления точного результата, настройка режима округления объекта MathContext с настройкой точности 0 не используется и, следовательно, не имеет значения. В случае деления точный результат может иметь бесконечно длинную десятичную запись; например, 1 деленное на 3. Если результат деления имеет бесконечную десятичную запись, а операция должна вернуть точный результат, выбрасывается исключение ArithmeticException. В противном случае возвращается точный результат деления, как и в случае других операций.

Когда настройка точности не равна 0, правила арифметики с плавающей точкой в целом совместимы с выбранными режимами работы арифметики, определенными в ANSI X3.274-1996 и ANSI X3.274-1996/AM 1-2000 (раздел 7.4). В отличие от этих стандартов, класс BigDecimal включает множество режимов округления, которые были обязательными для деления в BigDecimal версиях до 5. Любые противоречия между этими стандартами ANSI и спецификацией класса BigDecimal разрешаются в пользу BigDecimal.

Поскольку одно и то же числовое значение может иметь различные представления (с разными масштабами), правила арифметики и округления должны указывать как числовой результат, так и масштаб, используемый в представлении результата.

В общем случае режимы округления и настройка точности определяют, как операции возвращают результаты с ограниченным количеством цифр, когда точный результат содержит больше цифр (возможно, бесконечно много в случае деления и квадратного корня), чем количество возвращаемых цифр. Во-первых, общее количество цифр для возврата задается настройкой MathContext; это определяет точность результата. Подсчёт цифр начинается с самой левой ненулевой цифры точного результата. Режим округления определяет, как любые отброшенные хвостовые цифры влияют на возвращаемый результат.

Для всех арифметических операторов операция выполняется так, как будто сначала вычисляется точный промежуточный результат, а затем он округляется до заданного количества цифр (если необходимо) с использованием выбранного режима округления. Если точный результат не возвращается, некоторые разряды точного результата отбрасываются. При округления, увеличивающем значение возвращаемого результата, возможно создание нового разряда, так как происходит перенос в старший разряд с «9». Например, округление значения 999,9 до трех цифр с округлением вверх будет численно равно одной тысяче, представленной как 100×101. В таких случаях новая «1» является старшим разрядом возвращаемого результата.

Помимо логического точного результата, каждая арифметическая операция имеет предпочтительный масштаб для представления результата. Предпочтительный масштаб для каждой операции указан в таблице ниже.

Операция Предпочтительный масштаб результата
Сложение max(масштаб слагаемого, масштаб слагаемого)
Вычитание max(масштаб уменьшаемого, масштаб вычитаемого)
Умножение масштаб множителя + масштаб множимого
Деление масштаб делимого - масштаб делителя
Квадратный корень масштаб подкоренного выражения / 2
Эти масштабы используются методами, возвращающими точные арифметические результаты; за исключением точного деления, где может потребоваться больший масштаб, поскольку точный результат может иметь больше цифр. Например, 1/32 - это 0.03125.

Перед округлением масштаб логического точного промежуточного результата является предпочтительным масштабом для данной операции. Если точный числовой результат не может быть представлен в precision цифрах, округление выбирает набор цифр для возврата, и масштаб результата уменьшается от масштаба промежуточного результата до наименьшего масштаба, который может представить precision цифр, фактически возвращаемые. Если точный результат может быть представлен не более чем в precision цифрах, возвращается представление результата с масштабом, наиболее близким к предпочтительному масштабу. В частности, точно представимый частный может быть представлен меньше чем precision цифрами путем удаления хвостовых нулей и уменьшения масштаба. Например, округление до трех цифр с использованием режима округления floor,
19/100 = 0.19 // integer=19, scale=2
но
21/110 = 0.190 // integer=190, scale=3

Обратите внимание, что для сложения, вычитания и умножения уменьшение масштаба будет равно количеству разрядов точного результата, которые отбрасываются. Если округление вызывает перенос, чтобы создать новый старший разряд, то отбрасывается дополнительный разряд результата, чем при отсутствии нового разряда.

Другие методы могут иметь несколько отличную семантику округления. Например, результат метода pow, использующего указанный алгоритм, иногда может отличаться от округленного математического результата более чем на единицу в последнем разряде, одной ulp.

Для манипулирования масштабом объекта BigDecimal предоставляются два типа операций: операции масштабирования/округления и операции перемещения десятичной точки. Операции масштабирования/округления (setScale и round) возвращают объект BigDecimal, значение которого приблизительно (или точно) равно значению операнда, но масштаб или точность которого равны заданному значению; то есть, они увеличивают или уменьшают точность хранимого числа с минимальным влиянием на его значение. Операции перемещения десятичной точки (movePointLeft и movePointRight) возвращают объект BigDecimal, созданный из операнда путем перемещения десятичной точки на заданное расстояние в заданном направлении.

Для краткости и ясности в описаниях методов класса BigDecimal используется псевдокод. Выражение псевдокода (i + j) является сокращением от «объект BigDecimal, значение которого равно значению BigDecimal i, прибавленному к значению BigDecimal j». Выражение псевдокода (i == j) является сокращением от «true тогда и только тогда, когда BigDecimal i представляет то же значение, что и BigDecimal j». Другие выражения псевдокода интерпретируются аналогично. Квадратные скобки используются для обозначения пары определенного BigInteger и масштаба, определяющей значение BigDecimal; например, [19, 2] - это BigDecimal, численно равное 0,19, со масштабом 2.

Все методы и конструкторы этого класса выбрасывают исключение NullPointerException, если в качестве входного параметра передается ссылка на объект null.

Примечание по API:
Следует проявлять осторожность, если объекты BigDecimal используются в качестве ключей в SortedMap или в качестве элементов в SortedSet, так как естественный порядок BigDecimal несовместим с equals. См. Comparable, SortedMap или SortedSet для получения дополнительной информации.
С момента:
1.1
См. также:
BigInteger, MathContext, RoundingMode, SortedMap, SortedSet, Форматированный вывод

Поля

Модификатор и тип Поле Описание
static BigDecimal ONE

Значение 1 со масштабом 0.

static int ROUND_CEILING

Устарело.

Используйте RoundingMode.CEILING вместо этого.

static int ROUND_DOWN

Устарело.

Используйте RoundingMode.DOWN вместо этого.

static int ROUND_FLOOR

Устарело.

Используйте RoundingMode.FLOOR вместо этого.

static int ROUND_HALF_DOWN

Устарело.

Используйте RoundingMode.HALF_DOWN вместо этого.

static int ROUND_HALF_EVEN

Устарело.

Используйте RoundingMode.HALF_EVEN вместо этого.

static int ROUND_HALF_UP

Устарело.

Используйте RoundingMode.HALF_UP вместо этого.

static int ROUND_UNNECESSARY

Устарело.

Используйте RoundingMode.UNNECESSARY вместо этого.

static int ROUND_UP

Устарело.

Используйте RoundingMode.UP вместо этого.

static BigDecimal TEN

Значение 10 со масштабом 0.

static BigDecimal ZERO

Значение 0 со масштабом 0.

Краткое описание конструкторов

Конструктор Описание
BigDecimal​(char[] in)

Преобразует строковое представление массива символов BigDecimal в BigDecimal, используя ту же последовательность символов, что и конструктор BigDecimal(String).

BigDecimal​(char[] in, int offset, int len)

Преобразует строковое представление массива символов BigDecimal в BigDecimal, используя ту же последовательность символов, что и конструктор BigDecimal(String), но позволяя указать подмассив.

BigDecimal​(char[] in, int offset, int len, MathContext mc)

Преобразует строковое представление массива символов BigDecimal в BigDecimal, используя ту же последовательность символов, что и конструктор BigDecimal(String), позволяя указать подмассив и применяя округление в соответствии с настройками контекста.

BigDecimal​(char[] in, MathContext mc)

Преобразует строковое представление массива символов BigDecimal в BigDecimal, используя ту же последовательность символов, что и конструктор BigDecimal(String) и применяя округление в соответствии с настройками контекста.

BigDecimal​(double val)

Преобразует double в BigDecimal, что представляет собой точное десятичное представление двоичного значения с плавающей точкой double.

BigDecimal​(double val, MathContext mc)

Преобразует double в BigDecimal, применяя округление в соответствии с настройками контекста.

BigDecimal​(int val)

Преобразует int в BigDecimal.

BigDecimal​(int val, MathContext mc)

Преобразует int в BigDecimal, применяя округление в соответствии с настройками контекста.

BigDecimal​(long val)

Преобразует long в BigDecimal.

BigDecimal​(long val, MathContext mc)

Преобразует long в BigDecimal, применяя округление в соответствии с настройками контекста.

BigDecimal​(String val)

Преобразует строковое представление BigDecimal в BigDecimal.

BigDecimal​(String val, MathContext mc)

Преобразует строковое представление BigDecimal в BigDecimal, используя те же строки, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.

BigDecimal​(BigInteger val)

Преобразует BigInteger в BigDecimal.

BigDecimal​(BigInteger unscaledVal, int scale)

Преобразует значение BigInteger без масштаба и масштаб int в BigDecimal.

BigDecimal​(BigInteger unscaledVal, int scale, MathContext mc)

Преобразует значение BigInteger без масштаба и масштаб int в BigDecimal, применяя округление в соответствии с настройками контекста.

BigDecimal​(BigInteger val, MathContext mc)

Преобразует BigInteger в BigDecimal, применяя округление в соответствии с настройками контекста.

Методы

Модификатор и тип Метод Описание
BigDecimal abs()

Возвращает BigDecimal, значение которого является абсолютным значением этого BigDecimal, а масштаб — this.scale().

BigDecimal abs​(MathContext mc)

Возвращает BigDecimal, значение которого является абсолютным значением этого BigDecimal с округлением в соответствии с настройками контекста.

BigDecimal add​(BigDecimal augend)

Возвращает BigDecimal, значение которого равно (this + augend), а масштаб — max(this.scale(), augend.scale()).

BigDecimal add​(BigDecimal augend, MathContext mc)

Возвращает BigDecimal, значение которого равно (this + augend) с округлением в соответствии с настройками контекста.

byte byteValueExact()

Преобразует этот BigDecimal в byte, проверяя потерю информации.

int compareTo​(BigDecimal val)

Сравнивает этот BigDecimal с указанным BigDecimal.

BigDecimal divide​(BigDecimal divisor)

Возвращает BigDecimal, значение которого равно (this / divisor), а предпочтительный масштаб — (this.scale() - divisor.scale()); если точное частное не может быть представлено (поскольку оно имеет бесконечное десятичное разложение), генерируется ArithmeticException.

BigDecimal divide​(BigDecimal divisor, int roundingMode)

Устарело.

Вместо этого метода следует использовать divide(BigDecimal, RoundingMode).

BigDecimal divide​(BigDecimal divisor, int scale, int roundingMode)

Устарело.

Вместо этого метода следует использовать divide(BigDecimal, int, RoundingMode).

BigDecimal divide​(BigDecimal divisor, int scale, RoundingMode roundingMode)

Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб указан.

BigDecimal divide​(BigDecimal divisor, MathContext mc)

Возвращает BigDecimal, значение которого равно (this / divisor) с округлением в соответствии с настройками контекста.

BigDecimal divide​(BigDecimal divisor, RoundingMode roundingMode)

Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб — this.scale().

BigDecimal[] divideAndRemainder​(BigDecimal divisor)

Возвращает массив из двух элементов BigDecimal, содержащий результат divideToIntegralValue, за которым следует результат remainder для двух операндов.

BigDecimal[] divideAndRemainder​(BigDecimal divisor, MathContext mc)

Возвращает массив из двух элементов BigDecimal, содержащий результат divideToIntegralValue, за которым следует результат remainder для двух операндов, вычисленных с округлением в соответствии с настройками контекста.

BigDecimal divideToIntegralValue​(BigDecimal divisor)

Возвращает BigDecimal, значение которого равно целочисленной части частного (this / divisor), округлённой вниз.

BigDecimal divideToIntegralValue​(BigDecimal divisor, MathContext mc)

Возвращает BigDecimal, значение которого равно целочисленной части (this / divisor).

double doubleValue()

Преобразует этот BigDecimal в double.

boolean equals​(Object x)

Сравнивает этот BigDecimal с указанным Object на равенство.

float floatValue()

Преобразует этот BigDecimal в float.

int hashCode()

Возвращает хеш-код для этого BigDecimal.

int intValue()

Преобразует этот BigDecimal в int.

int intValueExact()

Преобразует этот BigDecimal в int, проверяя потерю информации.

long longValue()

Преобразует этот BigDecimal в long.

long longValueExact()

Преобразует этот BigDecimal в long, проверяя потерю информации.

BigDecimal max​(BigDecimal val)

Возвращает максимальное значение между этим BigDecimal и val.

BigDecimal min​(BigDecimal val)

Возвращает минимальное значение между этим BigDecimal и val.

BigDecimal movePointLeft​(int n)

Возвращает BigDecimal, эквивалентное этому, но с десятичной запятой, сдвинутой на n позиций влево.

BigDecimal movePointRight​(int n)

Возвращает BigDecimal, эквивалентное этому, но с десятичной запятой, сдвинутой на n позиций вправо.

BigDecimal multiply​(BigDecimal multiplicand)

Возвращает BigDecimal, значение которого равно (this × multiplicand), а масштаб — (this.scale() + multiplicand.scale()).

BigDecimal multiply​(BigDecimal multiplicand, MathContext mc)

Возвращает BigDecimal, значение которого равно (this × multiplicand) с округлением в соответствии с настройками контекста.

BigDecimal negate()

Возвращает BigDecimal, значение которого равно (-this), а масштаб — this.scale().

BigDecimal negate​(MathContext mc)

Возвращает BigDecimal, значение которого равно (-this) с округлением в соответствии с настройками контекста.

BigDecimal plus()

Возвращает BigDecimal, значение которого равно (+this), а масштаб — this.scale().

BigDecimal plus​(MathContext mc)

Возвращает BigDecimal, значение которого равно (+this) с округлением в соответствии с настройками контекста.

BigDecimal pow​(int n)

Возвращает BigDecimal, значение которого равно (thisn). Возведение в степень вычисляется точно с неограниченной точностью.

BigDecimal pow​(int n, MathContext mc)

Возвращает BigDecimal, значение которого равно (thisn).

int precision()

Возвращает точность этого BigDecimal.

BigDecimal remainder​(BigDecimal divisor)

Возвращает BigDecimal, значение которого равно (this % divisor).

BigDecimal remainder​(BigDecimal divisor, MathContext mc)

Возвращает BigDecimal, значение которого равно (this % divisor) с округлением в соответствии с настройками контекста.

BigDecimal round​(MathContext mc)

Возвращает BigDecimal, округлённый в соответствии с настройками MathContext.

int scale()

Возвращает масштаб этого BigDecimal.

BigDecimal scaleByPowerOfTen​(int n)

Возвращает BigDecimal, численное значение которого равно (this * 10n).

BigDecimal setScale​(int newScale)

Возвращает BigDecimal, масштаб которого равен указанному значению, а значение численно равно значению этого BigDecimal.

BigDecimal setScale​(int newScale, int roundingMode)

Устарело.

Вместо этого метода следует использовать setScale(int, RoundingMode).

BigDecimal setScale​(int newScale, RoundingMode roundingMode)

Возвращает BigDecimal, масштаб которого равен указанному значению, а значение без масштаба определяется путём умножения или деления значения без масштаба этого BigDecimal на соответствующую степень десяти для сохранения его общего значения.

short shortValueExact()

Преобразует этот BigDecimal в short, проверяя потерю информации.

int signum()

Возвращает функцию знака этого BigDecimal.

BigDecimal sqrt​(MathContext mc)

Возвращает приближение квадратного корня из this с округлением в соответствии с настройками контекста.

BigDecimal stripTrailingZeros()

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

BigDecimal subtract​(BigDecimal subtrahend)

Возвращает BigDecimal, значение которого равно (this - subtrahend), а масштаб равен max(this.scale(), subtrahend.scale()).

BigDecimal subtract​(BigDecimal subtrahend, MathContext mc)

Возвращает BigDecimal, значение которого равно (this - subtrahend), с округлением в соответствии с настройками контекста.

BigInteger toBigInteger()

Преобразует этот BigDecimal в BigInteger.

BigInteger toBigIntegerExact()

Преобразует этот BigDecimal в BigInteger, проверяя потерю информации.

String toEngineeringString()

Возвращает строковое представление этого BigDecimal, используя инженерную нотацию, если нужен экспоненциальный вид.

String toPlainString()

Возвращает строковое представление этого BigDecimal без поля экспоненты.

String toString()

Возвращает строковое представление этого BigDecimal, используя научную нотацию, если нужен экспоненциальный вид.

BigDecimal ulp()

Возвращает размер ulp (единицы в последнем разряде) этого BigDecimal.

BigInteger unscaledValue()

Возвращает BigInteger, значение которого равно немасштабированному значению этого BigDecimal.

static BigDecimal valueOf​(double val)

Преобразует double в BigDecimal, используя каноническое строковое представление double, предоставляемое методом Double.toString(double).

static BigDecimal valueOf​(long val)

Преобразует значение long в BigDecimal с масштабом ноль.

static BigDecimal valueOf​(long unscaledVal, int scale)

Преобразует немасштабированное значение long и масштаб int в BigDecimal.

Методы, объявленные в классе java.lang.Number

byteValue, shortValue

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание полей

ZERO

public static final BigDecimal ZERO

Значение 0 с масштабом 0.

Since:
1.5

ONE

public static final BigDecimal ONE

Значение 1 с масштабом 0.

Since:
1.5

TEN

public static final BigDecimal TEN

Значение 10 с масштабом 0.

Since:
1.5

ROUND_UP

@Deprecated(since="9")
public static final int ROUND_UP
Deprecated.
Используйте RoundingMode.UP вместо этого.

Режим округления от нуля. Всегда увеличивает цифру перед не нулевой отбрасываемой дробной частью. Обратите внимание, что этот режим округления никогда не уменьшает величину вычисленного значения.

См. также:
Постоянные значения поля

ROUND_DOWN

@Deprecated(since="9")
public static final int ROUND_DOWN
Deprecated.
Используйте RoundingMode.DOWN вместо этого.

Режим округления к нулю. Никогда не увеличивает цифру перед отброшенной дробной частью (т.е. усечение). Обратите внимание, что этот режим округления никогда не увеличивает величину вычисленного значения.

См. также:
Постоянные значения поля

ROUND_CEILING

@Deprecated(since="9")
public static final int ROUND_CEILING
Deprecated.
Используйте RoundingMode.CEILING вместо этого.

Режим округления к положительной бесконечности. Если BigDecimal положительно, ведет себя как для ROUND_UP; если отрицательно, ведет себя как для ROUND_DOWN. Обратите внимание, что этот режим округления никогда не уменьшает вычисленное значение.

См. также:
Постоянные значения поля

ROUND_FLOOR

@Deprecated(since="9")
public static final int ROUND_FLOOR
Deprecated.
Используйте RoundingMode.FLOOR вместо этого.

Режим округления к отрицательной бесконечности. Если BigDecimal положительно, ведет себя как для ROUND_DOWN; если отрицательно, ведет себя как для ROUND_UP. Обратите внимание, что этот режим округления никогда не увеличивает вычисленное значение.

См. также:
Постоянные значения поля

ROUND_HALF_UP

@Deprecated(since="9")
public static final int ROUND_HALF_UP
Deprecated.
Используйте RoundingMode.HALF_UP вместо этого.

Режим округления к ближайшему соседу, если оба соседа равноудалены, то округляется вверх. Ведёт себя как для ROUND_UP, если отбрасываемая дробная часть ≥ 0,5; в противном случае, ведет себя как для ROUND_DOWN. Обратите внимание, что это режим округления, который большинство из нас изучали в начальной школе.

См. также:
Постоянные значения поля

ROUND_HALF_DOWN

@Deprecated(since="9")
public static final int ROUND_HALF_DOWN
Deprecated.
Используйте RoundingMode.HALF_DOWN вместо этого.

Режим округления к ближайшему соседу, если оба соседа равноудалены, то округляется вниз. Ведёт себя как для ROUND_UP, если отбрасываемая дробная часть > 0,5; в противном случае, ведет себя как для ROUND_DOWN.

См. также:
Постоянные значения поля

ROUND_HALF_EVEN

@Deprecated(since="9")
public static final int ROUND_HALF_EVEN
Deprecated.
Используйте RoundingMode.HALF_EVEN вместо этого.

Режим округления к ближайшему соседу, если оба соседа равноудалены, то округляется к четному соседу. Ведёт себя как для ROUND_HALF_UP, если цифра слева от отброшенной дробной части нечётная; ведет себя как для ROUND_HALF_DOWN, если чётная. Обратите внимание, что этот режим округления минимизирует кумулятивную ошибку при многократном применении в последовательности вычислений.

См. также:
Постоянные значения поля

ROUND_UNNECESSARY

@Deprecated(since="9")
public static final int ROUND_UNNECESSARY
Deprecated.
Используйте RoundingMode.UNNECESSARY вместо этого.

Режим округления, утверждающий, что запрашиваемое действие имеет точный результат, поэтому округление не требуется. Если этот режим округления указан при выполнении действия, приводящего к неточному результату, возникает ArithmeticException.

См. также:
Постоянные значения поля

Конструкторы

BigDecimal

public BigDecimal(char[] in,
                  int offset,
                  int len)

Преобразует строковое представление символьного массива BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), при этом разрешая указать подмассив.

Примечание реализации:
Если последовательность символов уже доступна в символьном массиве, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора BigDecimal(String).
Параметры:
in - символьный массив, являющийся источником символов.
offset - первый символ в массиве для проверки.
len - количество символов для рассмотрения.
Исключение:
NumberFormatException - если in не является корректным представлением BigDecimal или определенный подмассив выходит за пределы in.
С:
1.5

BigDecimal

public BigDecimal(char[] in,
                  int offset,
                  int len,
                  MathContext mc)

Преобразует строковое представление символьного массива BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), при этом разрешая указать подмассив и применяя округление в соответствии с настройками контекста.

Примечание реализации:
Если последовательность символов уже доступна в символьном массиве, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора BigDecimal(String).
Параметры:
in - символьный массив, являющийся источником символов.
offset - первый символ в массиве для проверки.
len - количество символов для рассмотрения.
mc - контекст для использования.
Исключение:
ArithmeticException - если результат неточен, но режим округления UNNECESSARY.
NumberFormatException - если in не является корректным представлением BigDecimal или определенный подмассив выходит за пределы in.
С:
1.5

BigDecimal

public BigDecimal(char[] in)

Преобразует строковое представление символьного массива BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String).

Примечание реализации:
Если последовательность символов уже доступна в виде символьного массива, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора BigDecimal(String).
Параметры:
in - символьный массив, являющийся источником символов.
Исключение:
NumberFormatException - если in не является корректным представлением BigDecimal.
С:
1.5

BigDecimal

public BigDecimal(char[] in,
                  MathContext mc)

Преобразует строковое представление символьного массива BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.

Примечание реализации:
Если последовательность символов уже доступна в виде символьного массива, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора BigDecimal(String).
Параметры:
in - символьный массив, являющийся источником символов.
mc - контекст для использования.
Исключение:
ArithmeticException - если результат неточен, но режим округления UNNECESSARY.
NumberFormatException - если in не является корректным представлением BigDecimal.
С:
1.5

BigDecimal

public BigDecimal(String val)

Преобразует строковое представление BigDecimal в BigDecimal. Строковое представление состоит из необязательного знака, '+' ( '\u002B') или '-' ('\u002D'), за которым следует последовательность нуля или более десятичных цифр ("целая часть"), необязательно за которой следует дробная часть, необязательно за которой следует экспонента.

Дробная часть состоит из десятичной точки, за которой следуют ноль или более десятичных цифр. Строка должна содержать по крайней мере одну цифру либо в целой, либо в дробной части. Число, образованное знаком, целой и дробной частью, называется мантиссой.

Экспонента состоит из символа 'e' ('\u0065') или 'E' ('\u0045'), за которым следует одна или более десятичных цифр. Значение экспоненты должно лежать в диапазоне от -Integer.MAX_VALUE (Integer.MIN_VALUE+1) до Integer.MAX_VALUE, включительно.

Более формально, строки, принимаемые этим конструктором, описываются следующей грамматикой:

BigDecimalString:
Signopt Significand Exponentopt
Sign:
+
-
Significand:
IntegerPart . FractionPartopt
. FractionPart
IntegerPart
IntegerPart:
Digits
FractionPart:
Digits
Exponent:
ExponentIndicator SignedInteger
ExponentIndicator:
e
E
SignedInteger:
Signopt Digits
Digits:
Digit
Digits Digit
Digit:
любой символ, для которого Character.isDigit(char) возвращает true, включая 0, 1, 2 ...

Масштаб возвращаемого BigDecimal будет равен количеству цифр в дробной части или нулю, если строка не содержит десятичной точки, с учетом корректировки на экспоненту; если строка содержит экспоненту, значение экспоненты вычитается из масштаба. Значение результата масштаба должно лежать в диапазоне от Integer.MIN_VALUE до Integer.MAX_VALUE включительно.

Преобразование символов в цифры обеспечивается Character.digit(char, int) с установкой на преобразование в систему счисления 10. В строке не должно содержаться дополнительных символов (например, пробелов).

Примеры:
Значение возвращаемого BigDecimal равно мантиссе × 10 экспоненте. Для каждой строки слева показано соответствующее представление [BigInteger, scale] справа.

"0"            [0,0]
 "0.00"         [0,2]
 "123"          [123,0]
 "-123"         [-123,0]
 "1.23E3"       [123,-1]
 "1.23E+3"      [123,-1]
 "12.3E+7"      [123,-6]
 "12.0"         [120,1]
 "12.3"         [123,1]
 "0.00123"      [123,5]
 "-1.23E-12"    [-123,14]
 "1234.5E-4"    [12345,5]
 "0E+7"         [0,-7]
 "-0"           [0,0]
Примечание API:
Для значений, отличных от float и double NaN и ±Infinity, этот конструктор совместим со значениями, возвращаемыми Float.toString(float) и Double.toString(double). Это, как правило, предпочтительный способ преобразования float или double в BigDecimal, так как он не страдает от непредсказуемости конструктора BigDecimal(double).
Параметры:
val - строковое представление BigDecimal.
Исключение:
NumberFormatException - если val не является корректным представлением BigDecimal.

BigDecimal

public BigDecimal(String val,
                  MathContext mc)

Преобразует строковое представление BigDecimal в BigDecimal, принимая те же строки, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.

Параметры:
val - строковое представление BigDecimal.
mc - контекст для использования.
Исключение:
ArithmeticException - если результат неточен, но режим округления UNNECESSARY.
NumberFormatException - если val не является корректным представлением BigDecimal.
С:
1.5

BigDecimal

public BigDecimal(double val)

Преобразует double в BigDecimal, представляющее собой точное десятичное представление двоичного плавающего значения double. Масштаб возвращаемого BigDecimal — наименьшее значение, при котором (10scale × val) является целым числом.

Примечания:

  1. Результаты этого конструктора могут быть несколько непредсказуемыми. Можно предположить, что запись new BigDecimal(0.1) в Java создаёт BigDecimal, который точно равен 0.1 (неописанное значение 1 со масштабом 1), но на самом деле он равен 0.1000000000000000055511151231257827021181583404541015625. Это происходит потому, что 0.1 не может быть представлен точно как double (или, вообще, как двоичная дробь конечной длины).
  2. Конструктор String, с другой стороны, совершенно предсказуем: запись new BigDecimal("0.1") создаёт BigDecimal, который точно равен 0.1, как и ожидалось. Поэтому рекомендуется использовать конструктор конструктор строки вместо этого.
  3. Когда double необходимо использовать в качестве источника для BigDecimal, обратите внимание, что этот конструктор обеспечивает точное преобразование; он не даёт тот же результат, что и преобразование double в String с помощью метода Double.toString(double), а затем использование конструктора BigDecimal(String). Чтобы получить этот результат, используйте метод static valueOf(double).
Параметры:
val - double значение, которое необходимо преобразовать в BigDecimal.
Исключения:
NumberFormatException - если val является бесконечным или NaN.

BigDecimal

public BigDecimal(double val,
                  MathContext mc)

Преобразует double в BigDecimal, с округлением в соответствии с параметрами контекста. Масштаб BigDecimal — наименьшее значение, при котором (10scale × val) является целым числом.

Результаты этого конструктора могут быть несколько непредсказуемыми, и его использование не рекомендуется; см. примечания к конструктору BigDecimal(double).

Параметры:
val - double значение, которое необходимо преобразовать в BigDecimal.
mc - контекст для использования.
Исключения:
ArithmeticException - если результат неточен, но режим округления — UNNECESSARY.
NumberFormatException - если val является бесконечным или NaN.
С:
1.5

BigDecimal

public BigDecimal(BigInteger val)

Преобразует BigInteger в BigDecimal. Масштаб BigDecimal равен нулю.

Параметры:
val - BigInteger значение, которое необходимо преобразовать в BigDecimal.

BigDecimal

public BigDecimal(BigInteger val,
                  MathContext mc)

Преобразует BigInteger в BigDecimal с округлением в соответствии с параметрами контекста. Масштаб BigDecimal равен нулю.

Параметры:
val - BigInteger значение, которое необходимо преобразовать в BigDecimal.
mc - контекст для использования.
Исключения:
ArithmeticException - если результат неточен, но режим округления — UNNECESSARY.
С:
1.5

BigDecimal

public BigDecimal(BigInteger unscaledVal,
                  int scale)

Преобразует BigInteger неопределённое значение и int масштаб в BigDecimal. Значение BigDecimal равно (unscaledVal × 10-scale).

Параметры:
unscaledVal - неопределённое значение BigDecimal.
scale - масштаб BigDecimal.

BigDecimal

public BigDecimal(BigInteger unscaledVal,
                  int scale,
                  MathContext mc)

Преобразует BigInteger неопределённое значение и int масштаб в BigDecimal с округлением в соответствии с параметрами контекста. Значение BigDecimal равно (unscaledVal × 10-scale), округлено согласно параметрам precision и режима округления.

Параметры:
unscaledVal - неопределённое значение BigDecimal.
scale - масштаб BigDecimal.
mc - контекст для использования.
Исключения:
ArithmeticException - если результат неточен, но режим округления — UNNECESSARY.
С:
1.5

BigDecimal

public BigDecimal(int val)

Преобразует int в BigDecimal. Масштаб BigDecimal равен нулю.

Параметры:
val - int значение, которое необходимо преобразовать в BigDecimal.
С:
1.5

BigDecimal

public BigDecimal(int val,
                  MathContext mc)

Преобразует int в BigDecimal с округлением в соответствии с параметрами контекста. Масштаб BigDecimal, до любого округления, равен нулю.

Параметры:
val - int значение, которое необходимо преобразовать в BigDecimal.
mc - контекст для использования.
Исключения:
ArithmeticException - если результат неточен, но режим округления — UNNECESSARY.
С:
1.5

BigDecimal

public BigDecimal(long val)

Преобразует long в BigDecimal. Масштаб BigDecimal равен нулю.

Параметры:
val - long значение, которое необходимо преобразовать в BigDecimal.
С:
1.5

BigDecimal

public BigDecimal(long val,
                  MathContext mc)

Преобразует long в BigDecimal с округлением в соответствии с параметрами контекста. Масштаб BigDecimal, до любого округления, равен нулю.

Параметры:
val - long значение, которое необходимо преобразовать в BigDecimal.
mc - контекст для использования.
Исключения:
ArithmeticException - если результат неточен, но режим округления — UNNECESSARY.
С:
1.5

Методы

valueOf

public static BigDecimal valueOf(long unscaledVal,
                                 int scale)

Преобразует не масштабированное значение и масштаб в BigDecimal.

API Note:
Этот статический фабричный метод предоставляется предпочтительнее, чем конструктор (long, int), поскольку он позволяет повторно использовать часто используемые значения BigDecimal.
Параметры:
unscaledVal - не масштабированное значение BigDecimal.
scale - масштаб BigDecimal.
Возвращает:
a BigDecimal, значение которого равно (unscaledVal × 10-scale).

valueOf

public static BigDecimal valueOf(long val)

Преобразует значение long в BigDecimal с масштабом ноль.

API Note:
Этот статический фабричный метод предоставляется предпочтительнее, чем конструктор (long), поскольку он позволяет повторно использовать часто используемые значения BigDecimal.
Параметры:
val - значение BigDecimal.
Возвращает:
a BigDecimal, значение которого равно val.

valueOf

public static BigDecimal valueOf(double val)

Преобразует double в BigDecimal, используя каноническое строковое представление double, предоставленное методом Double.toString(double).

API Note:
Это, как правило, предпочтительный способ преобразования double (или float) в BigDecimal, поскольку возвращаемое значение равно значению, полученному в результате создания BigDecimal из результата использования Double.toString(double).
Параметры:
val - double для преобразования в BigDecimal.
Возвращает:
a BigDecimal, значение которого равно или приблизительно равно значению val.
Исключения:
NumberFormatException - если val бесконечно или NaN.
С версии:
1.5

add

public BigDecimal add(BigDecimal augend)

Возвращает BigDecimal, значение которого равно (this + augend), а масштаб равен max(this.scale(), augend.scale()).

Параметры:
augend - значение, которое нужно добавить к этому BigDecimal.
Возвращает:
this + augend

add

public BigDecimal add(BigDecimal augend,
                      MathContext mc)

Возвращает BigDecimal, значение которого равно (this + augend), с округлением в соответствии с настройками контекста. Если любое из чисел равно нулю, а настройка точности отлична от нуля, то в качестве результата используется другое число, округленное при необходимости.

Параметры:
augend - значение, которое нужно добавить к этому BigDecimal.
mc - контекст для использования.
Возвращает:
this + augend, округленное по необходимости.
Исключения:
ArithmeticException - если результат неточен, но режим округления равен UNNECESSARY.
С версии:
1.5

subtract

public BigDecimal subtract(BigDecimal subtrahend)

Возвращает BigDecimal, значение которого равно (this - subtrahend), а масштаб равен max(this.scale(), subtrahend.scale()).

Параметры:
subtrahend - значение, которое нужно вычесть из этого BigDecimal.
Возвращает:
this - subtrahend

subtract

public BigDecimal subtract(BigDecimal subtrahend,
                           MathContext mc)

Возвращает BigDecimal, значение которого равно (this - subtrahend), с округлением в соответствии с настройками контекста. Если subtrahend равно нулю, то используется это значение, округленное при необходимости, в качестве результата. Если это значение равно нулю, то результатом является subtrahend.negate(mc).

Параметры:
subtrahend - значение, которое нужно вычесть из этого BigDecimal.
mc - контекст для использования.
Возвращает:
this - subtrahend, округленное по необходимости.
Исключения:
ArithmeticException - если результат неточен, но режим округления равен UNNECESSARY.
С версии:
1.5

multiply

public BigDecimal multiply(BigDecimal multiplicand)

Возвращает BigDecimal, значение которого равно (this × multiplicand), а масштаб равен (this.scale() + multiplicand.scale()).

Параметры:
multiplicand - значение, на которое нужно умножить это BigDecimal.
Возвращает:
this * multiplicand

multiply

public BigDecimal multiply(BigDecimal multiplicand,
                           MathContext mc)

Возвращает BigDecimal, значение которого равно (this × multiplicand), с округлением в соответствии с настройками контекста.

Параметры:
multiplicand - значение, на которое нужно умножить это BigDecimal.
mc - контекст для использования.
Возвращает:
this * multiplicand, округленное по необходимости.
Исключения:
ArithmeticException - если результат неточен, но режим округления равен UNNECESSARY.
С версии:
1.5

divide

@Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         int roundingMode)
Устарело.
Метод divide(BigDecimal, int, RoundingMode) следует использовать вместо этого устаревшего метода.

Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб указан. Если для получения результата с указанным масштабом необходимо выполнить округление, применяется указанный режим округления.

Параметры:
divisor - значение, на которое нужно разделить это BigDecimal.
scale - масштаб частного BigDecimal, которое нужно вернуть.
roundingMode - режим округления для применения.
Возвращает:
this / divisor
Исключения:
ArithmeticException - если divisor равно нулю, roundingMode==ROUND_UNNECESSARY и указанного масштаба недостаточно для точного представления результата деления.
IllegalArgumentException - если roundingMode не представляет допустимый режим округления.
См. также:
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

divide

public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         RoundingMode roundingMode)

Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб указан. Если для получения результата с указанным масштабом необходимо выполнить округление, применяется указанный режим округления.

Параметры:
divisor - значение, на которое нужно разделить это BigDecimal.
scale - масштаб частного BigDecimal, которое нужно вернуть.
roundingMode - режим округления для применения.
Возвращает:
this / divisor
Исключения:
ArithmeticException - если divisor равно нулю, roundingMode==RoundingMode.UNNECESSARY и указанного масштаба недостаточно для точного представления результата деления.
С версии:
1.5

divide

@Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor,
                         int roundingMode)
Устарело.
Метод divide(BigDecimal, RoundingMode) следует использовать вместо этого устаревшего метода.

Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб равен this.scale(). Если для получения результата с заданным масштабом необходимо выполнить округление, применяется указанный режим округления.

Параметры:
divisor - значение, на которое нужно разделить это BigDecimal.
roundingMode - режим округления для применения.
Возвращает:
this / divisor
Исключения:
ArithmeticException - если divisor==0, или roundingMode==ROUND_UNNECESSARY и this.scale() недостаточно для точного представления результата деления.
IllegalArgumentException - если roundingMode не представляет допустимый режим округления.
См. также:
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

divide

public BigDecimal divide(BigDecimal divisor,
                         RoundingMode roundingMode)

Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб равен this.scale(). Если для получения результата с заданным масштабом необходимо выполнить округление, применяется указанный режим округления.

Параметры:
divisor - значение, на которое нужно разделить это BigDecimal.
roundingMode - режим округления для применения.
Возвращает:
this / divisor
Исключения:
ArithmeticException - если divisor==0, или roundingMode==RoundingMode.UNNECESSARY и this.scale() недостаточно для точного представления результата деления.
С версии:
1.5

divide

public BigDecimal divide(BigDecimal divisor)

Возвращает BigDecimal, значение которого равно (this / divisor), а предпочтительный масштаб равен (this.scale() - divisor.scale()); если точное частное не может быть представлено (потому что оно имеет непериодическое десятичное разложение), выбрасывается ArithmeticException.

Параметры:
divisor - значение, на которое нужно разделить это BigDecimal.
Возвращает:
this / divisor
Исключения:
ArithmeticException - если точное частное не имеет конечного десятичного разложения
С версии:
1.5

divide

public BigDecimal divide(BigDecimal divisor,
                         MathContext mc)

Возвращает BigDecimal, значение которого равно (this / divisor), с округлением в соответствии с настройками контекста.

Параметры:
divisor - делитель для этого BigDecimal.
mc - используемый контекст.
Возвращает:
this / divisor, округлённое по необходимости.
Исключения:
ArithmeticException - если результат неточен, но режим округления равен UNNECESSARY или mc.precision == 0, и частное имеет бесконечную десятичную дробь.
С:
1.5

divideToIntegralValue

public BigDecimal divideToIntegralValue(BigDecimal divisor)

Возвращает BigDecimal, значение которого равно целой части частного (this / divisor) с округлением вниз. Предпочтительная разрядность результата — (this.scale() - divisor.scale()).

Параметры:
divisor - делитель для этого BigDecimal.
Возвращает:
Целая часть this / divisor.
Исключения:
ArithmeticException - если divisor==0
С:
1.5

divideToIntegralValue

public BigDecimal divideToIntegralValue(BigDecimal divisor,
                                        MathContext mc)

Возвращает BigDecimal, значение которого равно целой части (this / divisor). Так как целая часть точного частного не зависит от режима округления, режим округления не влияет на значения, возвращаемые этим методом. Предпочтительная разрядность результата — (this.scale() - divisor.scale()). Исключение ArithmeticException выбрасывается, если целая часть точного частного требует более чем mc.precision цифр.

Параметры:
divisor - делитель для этого BigDecimal.
mc - используемый контекст.
Возвращает:
Целая часть this / divisor.
Исключения:
ArithmeticException - если divisor==0
ArithmeticException - если mc.precision > 0 и результат требует точности более чем mc.precision цифр.
С:
1.5

remainder

public BigDecimal remainder(BigDecimal divisor)

Возвращает BigDecimal, значение которого равно (this % divisor).

Остаток вычисляется как this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)). Обратите внимание, что это не операция modulo (результат может быть отрицательным).

Параметры:
divisor - делитель для этого BigDecimal.
Возвращает:
this % divisor.
Исключения:
ArithmeticException - если divisor==0
С:
1.5

remainder

public BigDecimal remainder(BigDecimal divisor,
                            MathContext mc)

Возвращает BigDecimal, значение которого равно (this % divisor) с округлением в соответствии с настройками контекста. Настройки MathContext влияют на неявное деление, используемое для вычисления остатка. Вычисление остатка по определению точно. Следовательно, остаток может содержать более чем mc.getPrecision() цифр.

Остаток вычисляется как this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor)). Обратите внимание, что это не операция modulo (результат может быть отрицательным).

Параметры:
divisor - делитель для этого BigDecimal.
mc - используемый контекст.
Возвращает:
this % divisor, округлённое по необходимости.
Исключения:
ArithmeticException - если divisor==0
ArithmeticException - если результат неточен, но режим округления равен UNNECESSARY, или mc.precision > 0, а результат this.divideToIntgralValue(divisor) потребовал бы точности более чем mc.precision цифр.
С:
1.5
См. также:
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor)

Возвращает массив из двух элементов BigDecimal, содержащий результат divideToIntegralValue, за которым следует результат remainder для двух операндов.

Обратите внимание, что если необходимы и целая часть частного, и остаток, этот метод быстрее, чем использование методов divideToIntegralValue и remainder по отдельности, потому что деление необходимо выполнить только один раз.

Параметры:
divisor - делитель для этого BigDecimal и вычисляемый остаток.
Возвращает:
массив из двух элементов типа BigDecimal: частное (результат divideToIntegralValue) — первый элемент, остаток — последний.
Исключения:
ArithmeticException - если divisor==0
С:
1.5
См. также:
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext), remainder(java.math.BigDecimal, java.math.MathContext)

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor,
                                       MathContext mc)

Возвращает массив из двух элементов BigDecimal, содержащий результат divideToIntegralValue, за которым следует результат remainder для двух операндов с округлением в соответствии с настройками контекста.

Обратите внимание, что если необходимы и целая часть частного, и остаток, этот метод быстрее, чем использование методов divideToIntegralValue и remainder по отдельности, потому что деление необходимо выполнить только один раз.

Параметры:
divisor - делитель для этого BigDecimal и вычисляемый остаток.
mc - используемый контекст.
Возвращает:
массив из двух элементов типа BigDecimal: частное (результат divideToIntegralValue) — первый элемент, остаток — последний.
Исключения:
ArithmeticException - если divisor==0
ArithmeticException - если результат неточен, но режим округления равен UNNECESSARY, или mc.precision > 0, а результат this.divideToIntgralValue(divisor) потребовал бы точности более чем mc.precision цифр.
С:
1.5
См. также:
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext), remainder(java.math.BigDecimal, java.math.MathContext)

sqrt

public BigDecimal sqrt(MathContext mc)

Возвращает приближение квадратного корня из this с округлением в соответствии с настройками контекста.

Предпочтительная разрядность возвращаемого результата равна this.scale()/2. Значение возвращаемого результата всегда находится в пределах одной единицы последнего разряда от точного десятичного значения для заданной точности. Если режим округления — HALF_UP, HALF_DOWN или HALF_EVEN, результат находится в пределах половины единицы последнего разряда от точного десятичного значения.

Особые случаи:

  • Квадратный корень из числа, численно равного ZERO, численно равен ZERO с предпочтительной разрядностью в соответствии с общим правилом выше. В частности, для ZERO, ZERO.sqrt(mc).equals(ZERO) верно с любым MathContext в качестве аргумента.
Параметры:
mc - используемый контекст.
Возвращает:
квадратный корень из this.
Исключения:
ArithmeticException - если this меньше нуля.
ArithmeticException - если требуется точный результат (mc.getPrecision()==0) и нет конечной десятичной записи точного результата
ArithmeticException - если (mc.getRoundingMode()==RoundingMode.UNNECESSARY) и точный результат не помещается в mc.getPrecision() цифр.
С:
9
См. также:
BigInteger.sqrt()

pow

public BigDecimal pow(int n)

Возвращает BigDecimal, значение которого равно (thisn). Возведение в степень вычисляется точно с неограниченной точностью.

Параметр n должен быть в диапазоне от 0 до 999999999 включительно. ZERO.pow(0) возвращает ONE. Обратите внимание, что в будущих версиях диапазон допустимых показателей степени этого метода может быть расширен.

Параметры:
n - показатель степени для возведения этого BigDecimal.
Возвращает:
thisn
Исключения:
ArithmeticException - если n находится вне диапазона.
С:
1.5

pow

public BigDecimal pow(int n,
                      MathContext mc)

Возвращает BigDecimal, значение которого равно (thisn). Текущая реализация использует основной алгоритм, определённый в ANSI-стандарте X3.274-1996, с округлением в соответствии с настройками контекста. В общем случае, возвращаемое числовое значение находится в пределах двух единиц последнего разряда от точного числового значения для выбранной точности. Обратите внимание, что в будущих версиях может быть использован другой алгоритм с уменьшенным допустимым пределом ошибки и расширенным диапазоном допустимых показателей степени.

Алгоритм X3.274-1996:

  • Исключение ArithmeticException выбрасывается, если
    • abs(n) > 999999999
    • mc.precision == 0 и n < 0
    • mc.precision > 0 и n имеет более чем mc.precision десятичных цифр
  • Если n равно нулю, возвращается ONE, даже если this равно нулю, в противном случае
    • Если n положительно, результат вычисляется с помощью техники возведения в степень посредством повторного возведения в квадрат в единый накопитель. Индивидуальные умножения с накопителем используют те же настройки контекста, что и в mc, за исключением увеличенной точности до mc.precision + elength + 1, где elength — количество десятичных цифр в n.
    • Если n отрицательно, результат вычисляется так, как если бы n было положительным; затем это значение делится на единицу с использованием указанной выше рабочей точности.
    • Конечное значение из положительного или отрицательного случая затем округляется до точности назначения.
Параметры:
n - степень, к которой нужно возвести это BigDecimal.
mc - контекст для использования.
Возвращает:
thisn, используя алгоритм ANSI стандарт X3.274-1996
Выбрасывает:
ArithmeticException - если результат неточен, но режим округления UNNECESSARY, или n выходит за пределы диапазона.
С тех пор:
1.5

abs

public BigDecimal abs()

Возвращает BigDecimal, значение которого равно абсолютному значению этого BigDecimal, а масштаб - this.scale().

Возвращает:
abs(this)

abs

public BigDecimal abs(MathContext mc)

Возвращает BigDecimal, значение которого равно абсолютному значению этого BigDecimal, с округлением в соответствии с настройками контекста.

Параметры:
mc - контекст для использования.
Возвращает:
abs(this), округлённый по необходимости.
Выбрасывает:
ArithmeticException - если результат неточен, но режим округления UNNECESSARY.
С тех пор:
1.5

negate

public BigDecimal negate()

Возвращает BigDecimal, значение которого равно (-this), а масштаб - this.scale().

Возвращает:
-this.

negate

public BigDecimal negate(MathContext mc)

Возвращает BigDecimal, значение которого равно (-this), с округлением в соответствии с настройками контекста.

Параметры:
mc - контекст для использования.
Возвращает:
-this, округлённый по необходимости.
Выбрасывает:
ArithmeticException - если результат неточен, но режим округления UNNECESSARY.
С тех пор:
1.5

plus

public BigDecimal plus()

Возвращает BigDecimal, значение которого равно (+this), а масштаб - this.scale().

Этот метод, который просто возвращает этот BigDecimal, включён для симметрии с методом унарного минуса negate().

Возвращает:
this.
С тех пор:
1.5
См. также:
negate()

plus

public BigDecimal plus(MathContext mc)

Возвращает BigDecimal, значение которого равно (+this), с округлением в соответствии с настройками контекста.

Эффект этого метода идентичен методу round(MathContext).

Параметры:
mc - контекст для использования.
Возвращает:
this, округлённый по необходимости. Ноль возвращается с масштабом 0.
Выбрасывает:
ArithmeticException - если результат неточен, но режим округления UNNECESSARY.
С тех пор:
1.5
См. также:
round(MathContext)

signum

public int signum()

Возвращает функцию знака этого BigDecimal.

Возвращает:
-1, 0 или 1 в зависимости от того, является ли значение этого BigDecimal отрицательным, нулевым или положительным.

scale

public int scale()

Возвращает масштаб этого BigDecimal. Если он равен нулю или положителен, то масштаб — это количество цифр справа от десятичной точки. Если отрицателен, то неусечённое значение числа умножается на десять в степени, равной отрицательному значению масштаба. Например, масштаб -3 означает, что неусечённое значение умножается на 1000.

Возвращает:
масштаб этого BigDecimal.

precision

public int precision()

Возвращает точность этого BigDecimal. (Точность — это количество цифр в неусечённом значении.)

Точность нулевого значения равна 1.

Возвращает:
точность этого BigDecimal.
С тех пор:
1.5

unscaledValue

public BigInteger unscaledValue()

Возвращает BigInteger, значение которого равно неусечённому значению этого BigDecimal. (Вычисляет (this * 10this.scale()).)

Возвращает:
неусечённое значение этого BigDecimal.
С тех пор:
1.2

round

public BigDecimal round(MathContext mc)

Возвращает BigDecimal, округлённый в соответствии с настройками MathContext. Если значение точности равно 0, то округление не выполняется.

Эффект этого метода идентичен методу plus(MathContext).

Параметры:
mc - контекст для использования.
Возвращает:
BigDecimal, округлённый в соответствии с настройками MathContext.
Выбрасывает:
ArithmeticException - если режим округления UNNECESSARY, и операция BigDecimal требует округления.
С тех пор:
1.5
См. также:
plus(MathContext)

setScale

public BigDecimal setScale(int newScale,
                           RoundingMode roundingMode)

Возвращает BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этого BigDecimal на соответствующую степень десяти для поддержания его общего значения. Если масштаб уменьшается в результате операции, неусечённое значение должно быть разделено (а не умножено), и значение может измениться; в этом случае применяется заданный режим округления к делению.

Примечание API:
Так как объекты BigDecimal неизменяемы, вызовы этого метода не приводят к изменению исходного объекта, в отличие от обычной практики именования методов setX, которые изменяют поле X. Вместо этого setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым.
Параметры:
newScale - масштаб значения BigDecimal, которое нужно вернуть.
roundingMode - режим округления для применения.
Возвращает:
BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этого BigDecimal на соответствующую степень десяти для поддержания его общего значения.
Выбрасывает:
ArithmeticException - если roundingMode==UNNECESSARY и указанная операция масштабирования потребовали бы округления.
С тех пор:
1.5
См. также:
RoundingMode

setScale

@Deprecated(since="9")
public BigDecimal setScale(int newScale,
                           int roundingMode)
Устаревший.
Метод setScale(int, RoundingMode) следует использовать вместо этого устаревшего метода.

Возвращает BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этого BigDecimal на соответствующую степень десяти для поддержания его общего значения. Если масштаб уменьшается в результате операции, неусечённое значение должно быть разделено (а не умножено), и значение может измениться; в этом случае применяется заданный режим округления к делению.

Примечание API:
Так как объекты BigDecimal неизменяемы, вызовы этого метода не приводят к изменению исходного объекта, в отличие от обычной практики именования методов setX, которые изменяют поле X. Вместо этого setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым.
Параметры:
newScale - масштаб значения BigDecimal, которое нужно вернуть.
roundingMode - режим округления для применения.
Возвращает:
BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этого BigDecimal на соответствующую степень десяти для поддержания его общего значения.
Выбрасывает:
ArithmeticException - если roundingMode==ROUND_UNNECESSARY и указанная операция масштабирования потребовали бы округления.
IllegalArgumentException - если roundingMode не представляет собой допустимый режим округления.
См. также:
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

setScale

public BigDecimal setScale(int newScale)

Возвращает BigDecimal, масштаб которого равен заданному значению, а значение численно равно значению этого BigDecimal. Выбрасывает ArithmeticException, если это невозможно.

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

Этот метод возвращает тот же результат, что и двухаргументные версии setScale, но экономит вызывающей стороне хлопоты по указанию режима округления в случаях, когда он не имеет значения.

Примечание API:
Поскольку объекты BigDecimal неизменяемы, вызовы этого метода не приводят к изменению исходного объекта, вопреки общепринятой конвенции, согласно которой методы, имеющие имя setX, изменяют поле X. Вместо этого метод setScale возвращает объект с соответствующей шкалой; возвращаемый объект может быть или не быть вновь выделенным.
Параметры:
newScale - масштаб значения BigDecimal, которое должно быть возвращено.
Возвращает:
объект BigDecimal, масштаб которого равен указанному значению, а значение без масштаба определяется умножением или делением значения без масштаба этого объекта BigDecimal на соответствующую степень десяти для сохранения его общего значения.
Выбрасывает:
ArithmeticException - если указанная операция масштабирования требует округления.
См. также:
setScale(int, int), setScale(int, RoundingMode)

movePointLeft

public BigDecimal movePointLeft(int n)

Возвращает объект BigDecimal, эквивалентный этому с десятичной точкой, смещённой влево на n позиций. Если n неотрицательно, вызов просто добавляет n к масштабу. Если n отрицательно, вызов эквивалентен movePointRight(-n). Объект BigDecimal, возвращённый этим вызовом, имеет значение (this × 10-n) и масштаб max(this.scale()+n, 0).

Параметры:
n - количество позиций для смещения десятичной точки влево.
Возвращает:
объект BigDecimal, эквивалентный этому с десятичной точкой, смещённой влево на n позиций.
Выбрасывает:
ArithmeticException - если масштаб переполнен.

movePointRight

public BigDecimal movePointRight(int n)

Возвращает объект BigDecimal, эквивалентный этому с десятичной точкой, смещённой вправо на n позиций. Если n неотрицательно, вызов просто вычитает n из масштаба. Если n отрицательно, вызов эквивалентен movePointLeft(-n). Объект BigDecimal, возвращённый этим вызовом, имеет значение (this × 10n) и масштаб max(this.scale()-n, 0).

Параметры:
n - количество позиций для смещения десятичной точки вправо.
Возвращает:
объект BigDecimal, эквивалентный этому с десятичной точкой, смещённой вправо на n позиций.
Выбрасывает:
ArithmeticException - если масштаб переполнен.

scaleByPowerOfTen

public BigDecimal scaleByPowerOfTen(int n)

Возвращает объект BigDecimal, численное значение которого равно (this * 10n). Масштаб результата равен (this.scale() - n).

Параметры:
n - показатель степени десяти для масштабирования
Возвращает:
объект BigDecimal, численное значение которого равно (this * 10n)
Выбрасывает:
ArithmeticException - если масштаб выйдет за пределы диапазона 32-битного целого числа.
С:
1.5

stripTrailingZeros

public BigDecimal stripTrailingZeros()

Возвращает объект BigDecimal, численно равный этому, но с удаленными из представления любыми завершающими нулями. Например, удаление завершающих нулей из значения BigDecimal 600.0, имеющего компоненты [BigInteger, scale], равные [6000, 1], даёт 6E2 с компонентами [BigInteger, scale], равными [6, -2]. Если этот объект BigDecimal численно равен нулю, возвращается BigDecimal.ZERO.

Возвращает:
числовой равный объект BigDecimal с удаленными любыми завершающими нулями.
С:
1.5

compareTo

public int compareTo(BigDecimal val)

Сравнивает этот объект BigDecimal с указанным объектом BigDecimal. Два объекта BigDecimal, равные по значению, но имеющие разный масштаб (например, 2.0 и 2.00), считаются равными этим методом. Этот метод предоставляется вместо отдельных методов для каждого из шести булевых операторов сравнения (<, ==, >, >=, !=, <=). Рекомендуемый способ выполнения этих сравнений: (x.compareTo(y) <op> 0), где <op> — один из шести операторов сравнения.

Определено в:
compareTo в интерфейсе Comparable<BigDecimal>
Параметры:
val - объект BigDecimal, с которым нужно сравнить этот объект BigDecimal.
Возвращает:
-1, 0 или 1, если этот объект BigDecimal численно меньше, равен или больше, чем val.

equals

public boolean equals(Object x)

Сравнивает этот объект BigDecimal с указанным объектом Object на равенство. В отличие от compareTo, этот метод считает два объекта BigDecimal равными только в том случае, если они равны по значению и масштабу (следовательно, 2.0 не равен 2.00 при сравнении этим методом).

Переопределяет:
equals в классе Object
Параметры:
x - объект Object, с которым нужно сравнить этот объект BigDecimal.
Возвращает:
true тогда и только тогда, когда указанный объект Object является объектом BigDecimal, значение и масштаб которого равны значению и масштабу этого объекта BigDecimal.
См. также:
compareTo(java.math.BigDecimal), hashCode()

min

public BigDecimal min(BigDecimal val)

Возвращает минимальное значение из этого объекта BigDecimal и val.

Параметры:
val - значение, с которым вычисляется минимум.
Возвращает:
объект BigDecimal, значение которого равно меньшему из значений этого объекта BigDecimal и val. Если они равны, как определено методом compareTo, возвращается this.
См. также:
compareTo(java.math.BigDecimal)

max

public BigDecimal max(BigDecimal val)

Возвращает максимальное значение из этого объекта BigDecimal и val.

Параметры:
val - значение, с которым вычисляется максимум.
Возвращает:
объект BigDecimal, значение которого равно большему из значений этого объекта BigDecimal и val. Если они равны, как определено методом compareTo, возвращается this.
См. также:
compareTo(java.math.BigDecimal)

hashCode

public int hashCode()

Возвращает код хэша для этого объекта BigDecimal. Обратите внимание, что два объекта BigDecimal, которые численно равны, но различаются по масштабу (например, 2.0 и 2.00), обычно не имеют одинаковый код хэша.

Переопределяет:
hashCode в классе Object
Возвращает:
код хэша для этого объекта BigDecimal.
См. также:
equals(Object)

toString

public String toString()

Возвращает строковое представление этого BigDecimal, используя научную запись, если нужен показатель степени.

Стандартная каноническая строковая форма BigDecimal создаётся как будто по следующим шагам: сначала абсолютное значение неразмеренного значения BigDecimal преобразуется в строку в десятичной системе счисления, используя символы '0' через '9' без ведущих нулей (за исключением случая, когда значение равно нулю, в котором случае используется единственный символ '0').

Далее вычисляется скорректированный показатель степени; это отрицательное масштабирование плюс количество символов в преобразованном неразмеренном значении минус один. То есть -scale+(ulength-1), где ulength — длина абсолютного значения неразмеренного значения в десятичных разрядах (его точность).

Если масштаб больше или равен нулю, а скорректированный показатель степени больше или равен -6, число будет преобразовано в строковую форму без использования экспоненциальной записи. В этом случае, если масштаб равен нулю, десятичная точка не добавляется, а если масштаб положителен, десятичная точка будет вставлена, и масштаб укажет количество символов справа от десятичной точки. '0' символов добавляются слева от преобразованного неразмеренного значения по необходимости. Если после этой вставки перед десятичной точкой нет символа, то добавляется обычный символ '0'.

В противном случае (то есть, если масштаб отрицательный или скорректированный показатель степени меньше -6), число будет преобразовано в строковую форму с использованием экспоненциальной записи. В этом случае, если преобразованное BigInteger имеет более одной цифры, десятичная точка вставляется после первой цифры. Затем к преобразованному неразмеренному значению (возможно, с вставленной десятичной точкой) добавляется показатель степени в строковой форме; это включает букву 'E', непосредственно за которой следует скорректированный показатель степени, преобразованный в строковую форму. Последний представлен в десятичной системе счисления, используя символы '0' через '9' без ведущих нулей, и всегда предваряется знаком '-' ('\u002D'), если скорректированный показатель степени отрицательный, '+' ('\u002B') в противном случае.

Наконец, вся строка предваряется знаком минус '−' ('\u002D'), если неразмеренное значение меньше нуля. Знак не добавляется, если неразмеренное значение равно нулю или положительно.

Примеры:

Для каждого представления [неразмеренное значение, масштаб] слева показана результирующая строка справа.

[123,0]      "123"
 [-123,0]     "-123"
 [123,-1]     "1.23E+3"
 [123,-3]     "1.23E+5"
 [123,1]      "12.3"
 [123,5]      "0.00123"
 [123,10]     "1.23E-8"
 [-123,12]    "-1.23E-10"
Примечания:
  1. Существует взаимно однозначное соответствие между различимыми BigDecimal значениями и результатом этого преобразования. То есть, каждое различимое BigDecimal значение (неразмеренное значение и масштаб) имеет уникальное строковое представление в результате применения toString. Если это строковое представление преобразовать обратно в BigDecimal, используя конструктор BigDecimal(String), то исходное значение будет восстановлено.
  2. Строка, созданная для данного числа, всегда одинакова; она не зависит от локали. Это означает, что она может использоваться в качестве канонического строкового представления для обмена десятичными данными или в качестве ключа для таблицы хэширования и т. д. Локально-чувствительный формат и разбор чисел обрабатываются классом NumberFormat и его подклассами.
  3. Метод toEngineeringString() может использоваться для представления чисел с показателями в инженерной записи, а метод setScale может использоваться для округления BigDecimal до заданного количества знаков после десятичной точки.
  4. Используется отображение цифр в символы, предоставляемое Character.forDigit.
Overrides:
toString в классе Object
Возвращает:
строковое представление этого BigDecimal.
См. также:
Character.forDigit(int, int), BigDecimal(java.lang.String)

toEngineeringString

public String toEngineeringString()

Возвращает строковое представление этого BigDecimal, используя инженерную запись, если нужен показатель степени.

Возвращает строку, которая представляет BigDecimal, как описано в методе toString(), за исключением того, что если используется экспоненциальная запись, показатель степени десятки корректируется до кратного трём (инженерная запись), таким образом, целая часть ненулевых значений будет находиться в диапазоне от 1 до 999. Если экспоненциальная запись используется для нулевых значений, используется десятичная точка и одна или две дробные нулевые цифры, чтобы сохранить масштаб нулевого значения. Обратите внимание, что, в отличие от вывода метода toString(), вывод этого метода не гарантирует восстановление той же пары [целое число, масштаб] этого BigDecimal, если строка вывода преобразуется обратно в BigDecimal с помощью конструктора строки . Результат этого метода удовлетворяет более слабому ограничению, всегда производя численный эквивалентный результат при применении конструктора строки к выводу метода.

Возвращает:
строковое представление этого BigDecimal, используя инженерную запись, если нужен показатель степени.
С момента:
1.5

toPlainString

public String toPlainString()

Возвращает строковое представление этого BigDecimal без поля показателя степени. Для значений с положительным масштабом количество цифр справа от десятичной точки используется для обозначения масштаба. Для значений с нулевым или отрицательным масштабом результирующая строка генерируется так, как если бы значение было преобразовано в численно эквивалентное значение с нулевым масштабом и как если бы все хвостовые нули нулевого масштабного значения присутствовали в результате. Вся строка предваряется знаком минус '−' ('\u002D'), если неразмеренное значение меньше нуля. Знак не добавляется, если неразмеренное значение равно нулю или положительно. Обратите внимание, что если результат этого метода передаётся в конструктор строки , то обязательно восстанавливается только числовое значение этого BigDecimal; представление нового BigDecimal может иметь другой масштаб. В частности, если у этого BigDecimal есть отрицательный масштаб, строка, полученная в результате этого метода, будет иметь масштаб нуль при обработке конструктором строки. (Этот метод ведет себя аналогично методу toString в версиях 1.4 и ранее.)

Возвращает:
строковое представление этого BigDecimal без поля показателя степени.
С момента:
1.5
См. также:
toString(), toEngineeringString()

toBigInteger

public BigInteger toBigInteger()

Преобразует это BigDecimal в BigInteger. Это преобразование аналогично преобразованию примитивного сужения из double в long, как определено в Спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена. Обратите внимание, что при этом преобразовании может быть потеряна информация о точности значения BigDecimal.

Чтобы при неточном преобразовании (то есть, если дробная часть отлична от нуля) было выброшено исключение, используйте метод toBigIntegerExact().

Возвращает:
это BigDecimal, преобразованное в BigInteger.

toBigIntegerExact

public BigInteger toBigIntegerExact()

Преобразует это BigDecimal в BigInteger, проверяя потерю информации. Если у этого BigDecimal есть дробная часть, отличная от нуля, выбросится исключение.

Возвращает:
это BigDecimal, преобразованное в BigInteger.
Выбрасывает:
ArithmeticException - если у this есть дробная часть, отличная от нуля.
С момента:
1.5

longValue

public long longValue()

Преобразует это BigDecimal в long. Это преобразование аналогично преобразованию примитивного сужения из double в short, как определено в Спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена, и если полученное "BigInteger" слишком велико для размещения в long, возвращаются только младшие 64 бита. Обратите внимание, что при этом преобразовании может быть потеряна информация о величине и точности этого BigDecimal значения, а также может быть возвращён результат с противоположным знаком.

Определено в:
longValue в классе Number
Возвращает:
это BigDecimal, преобразованное в long.

longValueExact

public long longValueExact()

Преобразует это BigDecimal в long, проверяя потерю информации. Если у этого BigDecimal есть дробная часть, отличная от нуля, или если оно выходит за пределы допустимого диапазона для long результата, выбросится исключение ArithmeticException.

Возвращает:
это BigDecimal, преобразованное в long.
Выбрасывает:
ArithmeticException - если у this есть дробная часть, отличная от нуля, или оно не помещается в long.
С момента:
1.5

intValue

public int intValue()

Преобразует это BigDecimal в int. Это преобразование аналогично преобразованию примитивного сужения из double в short, как определено в Спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена, и если полученное "BigInteger" слишком велико для размещения в int, возвращаются только младшие 32 бита. Обратите внимание, что при этом преобразовании может быть потеряна информация о величине и точности этого BigDecimal значения, а также может быть возвращён результат с противоположным знаком.

Определено в:
intValue в классе Number
Возвращает:
это BigDecimal, преобразованное в int.

intValueExact

public int intValueExact()

Преобразует этот BigDecimal в int, проверяя на потерю информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за допустимый диапазон для результата типа int, то будет брошено исключение ArithmeticException.

Возвращает:
этот BigDecimal, преобразованный в int.
Выбрасывает:
ArithmeticException - если у this есть ненулевая дробная часть или он не помещается в int.
С:
1.5

shortValueExact

public short shortValueExact()

Преобразует этот BigDecimal в short, проверяя на потерю информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за допустимый диапазон для результата типа short, то будет брошено исключение ArithmeticException.

Возвращает:
этот BigDecimal, преобразованный в short.
Выбрасывает:
ArithmeticException - если у this есть ненулевая дробная часть или он не помещается в short.
С:
1.5

byteValueExact

public byte byteValueExact()

Преобразует этот BigDecimal в byte, проверяя на потерю информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за допустимый диапазон для результата типа byte, то будет брошено исключение ArithmeticException.

Возвращает:
этот BigDecimal, преобразованный в byte.
Выбрасывает:
ArithmeticException - если у this есть ненулевая дробная часть или он не помещается в byte.
С:
1.5

floatValue

public float floatValue()

Преобразует этот BigDecimal в float. Это преобразование аналогично преобразованию примитивного сужения из double в float, как определено в Спецификации языка Java™: если у этого BigDecimal слишком большое значение для представления в виде float, он будет преобразован в Float.NEGATIVE_INFINITY или Float.POSITIVE_INFINITY соответственно. Обратите внимание, что даже когда возвращаемое значение конечно, это преобразование может потерять информацию о точности значения BigDecimal.

Определено в:
floatValue в классе Number
Возвращает:
этот BigDecimal, преобразованный в float.

doubleValue

public double doubleValue()

Преобразует этот BigDecimal в double. Это преобразование аналогично преобразованию примитивного сужения из double в float, как определено в Спецификации языка Java™: если у этого BigDecimal слишком большое значение для представления в виде double, он будет преобразован в Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY соответственно. Обратите внимание, что даже когда возвращаемое значение конечно, это преобразование может потерять информацию о точности значения BigDecimal.

Определено в:
doubleValue в классе Number
Возвращает:
этот BigDecimal, преобразованный в double.

ulp

public BigDecimal ulp()

Возвращает размер ulp (единица в последнем разряде) этого BigDecimal. ULP ненулевого значения BigDecimal — это положительное расстояние между этим значением и следующим по величине значением с тем же количеством цифр. ULP нулевого значения численно равно 1 со масштабом this. Результат сохраняется с тем же масштабом, что и this, поэтому результат для нулевых и ненулевых значений равен [1, this.scale()].

Возвращает:
размер ulp для this
С:
1.5

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html

Spec-Zone .ru
спецификации, руководства, описания, API