Класс BigDecimal
- Все реализуемые интерфейсы:
Serializable, Comparable<BigDecimal>
public class BigDecimal extends Number implements Comparable<BigDecimal>
BigDecimal состоит из целого числа произвольной точности немасштабированного значения и 32-разрядного целого числа масштаба. Если масштаб равен нулю или положителен, он обозначает количество цифр справа от десятичной точки. Если масштаб отрицателен, немасштабированное значение числа умножается на десять в степени, равной противоположному значению масштаба. Таким образом, значение числа, представленного BigDecimal, равно (unscaledValue × 10-scale). Класс BigDecimal предоставляет операции для выполнения арифметических действий, управления масштабом, округления, сравнения, хеширования и преобразования форматов. Метод toString() предоставляет каноническое представление BigDecimal.
Класс BigDecimal предоставляет пользователю полный контроль над поведением округления. Если режим округления не задан, а точный результат не может быть представлен, выбрасывается ArithmeticException; в противном случае вычисления можно выполнять с заданной точностью и режимом округления, передав соответствующий объект MathContext операции. В обоих случаях для управления округлением предусмотрено восемь режимов округления. Использование целочисленных полей этого класса (например, ROUND_HALF_UP) для обозначения режима округления объявлено устаревшим; вместо этого следует использовать значения перечисления RoundingMode enum (например, RoundingMode.HALF_UP).
Если объект MathContext передан с настройкой точности 0 (например, MathContext.UNLIMITED), арифметические операции выполняются точно, как и арифметические методы, которым объект MathContext не передается. Следствием вычисления точного результата является то, что настройка режима округления объекта
MathContext с точностью 0 не используется и, следовательно, не имеет значения. При делении точное частное может иметь бесконечное десятичное разложение; например, при делении 1 на 3. Если частное имеет бесконечное десятичное разложение, а операция должна вернуть точный результат, выбрасывается
ArithmeticException. В противном случае возвращается точный результат деления, как и для других операций.
Если настройка точности не равна 0, правила арифметики
BigDecimal в целом совместимы с выбранными режимами выполнения арифметических операций, определенными в ANSI X3.274-1996 и ANSI X3.274-1996/AM 1-2000 (раздел 7.4). В отличие от этих стандартов, BigDecimal включает множество режимов округления. Все противоречия между этими стандартами ANSI и спецификацией BigDecimal разрешаются в пользу BigDecimal.
Поскольку одно и то же числовое значение может иметь разные представления (с разными масштабами), правила арифметики и округления должны определять как числовой результат, так и масштаб, используемый в представлении результата. Разные представления одного и того же числового значения называются членами одной когорты. Естественный порядок BigDecimal считает членов одной когорты равными друг другу. В отличие от него, метод equals требует совпадения и числового значения, и представления. Результаты методов, таких как scale() и unscaledValue(), будут различаться для численно равных значений с разными представлениями.
В целом режимы округления и настройка точности определяют, как операции возвращают результаты с ограниченным количеством цифр, когда точный результат содержит больше цифр (возможно, бесконечно много в случае деления и извлечения квадратного корня), чем возвращаемое количество. Сначала общее количество возвращаемых цифр задается настройкой precision объекта MathContext; она определяет точность результата. Подсчет цифр начинается с самой левой ненулевой цифры точного результата. Режим округления определяет, как отбрасываемые конечные цифры влияют на возвращаемый результат.
Для всех арифметических операторов операция выполняется так, как если бы сначала вычислялся точный промежуточный результат, а затем он округлялся до количества цифр, заданного настройкой точности (если это необходимо), с использованием выбранного режима округления. Если точный результат не возвращается, некоторые разряды точного результата отбрасываются. Когда округление увеличивает величину возвращаемого результата, перенос в старший разряд «9» может привести к появлению нового разряда. Например, округление значения 999.9 до трех цифр с округлением вверх численно даст одну тысячу, представленную как 100×101. В таких случаях новая цифра «1» становится старшим разрядом возвращаемого результата.
Для методов и конструкторов с параметром MathContext, если результат неточен, но режим округления — UNNECESSARY, будет выброшено
ArithmeticException.
Помимо логически точного результата, каждой арифметической операции соответствует предпочтительный масштаб представления результата. Предпочтительный масштаб каждой операции указан в таблице ниже.
| Операция | Предпочтительный масштаб результата |
|---|---|
| Сложение | max(addend.scale(), augend.scale()) |
| Вычитание | max(minuend.scale(), subtrahend.scale()) |
| Умножение | multiplier.scale() + multiplicand.scale() |
| Деление | dividend.scale() - divisor.scale() |
| Квадратный корень | radicand.scale()/2 |
1/32 — это 0.03125. До округления масштаб логического точного промежуточного результата равен предпочтительному масштабу этой операции. Если точный числовой результат нельзя представить с помощью precision цифр, округление выбирает набор цифр для возврата, а масштаб результата уменьшается относительно масштаба промежуточного результата до наименьшего масштаба, позволяющего представить фактически возвращаемые precision цифр. Если точный результат можно представить не более чем с помощью precision цифр, возвращается представление результата с масштабом, наиболее близким к предпочтительному. В частности, точно представимое частное может быть представлено меньшим количеством, чем precision цифр, путем удаления конечных нулей и уменьшения масштаба. Например, при округлении до трех цифр с использованием режима округления к меньшему,
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, созданное из операнда перемещением десятичной точки на заданное расстояние в указанном направлении.
Масштаб — это 32-разрядное целое число, поэтому множество его значений велико, но ограничено. Если масштаб результата выйдет за пределы диапазона 32-разрядного целого числа из-за переполнения или потери значимости, операция может выбросить ArithmeticException.
Для краткости и ясности в описаниях методов 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.Связь с десятичной арифметикой IEEE 754
Начиная с редакции 2008 года, стандарт IEEE 754 для арифметики с плавающей точкой охватывает десятичные форматы и операции. Хотя десятичная арифметика, определенная IEEE 754 и этим классом, во многом схожа, между ними есть и заметные различия. Фундаментальное сходство междуBigDecimalи десятичной арифметикой IEEE 754 заключается в концептуальной операции: вычислении математического значения операции как бесконечно точного действительного числа с последующим отображением этого числа на представимое десятичное число с плавающей точкой согласно правилу округления. Это правило дляBigDecimalназывается режимом округления, а в IEEE 754-2019 — атрибутом направления округления. Если точное значение непредставимо, правило округления определяет, какое из двух представимых десятичных значений, ограничивающих точное значение, будет выбрано в качестве вычисленного результата. Понятие предпочтительного масштаба/предпочтительной экспоненты также используется в обеих системах.К различиям относится то, что IEEE 754 включает несколько видов значений, не моделируемых
BigDecimal, включая отрицательный ноль, знаковые бесконечности и NaN (не число). IEEE 754 определяет форматы, параметризуемые основанием (двоичным или десятичным), количеством значащих цифр и диапазоном экспоненты. Формат определяет множество представимых значений. Большинство операций принимают на вход одно или несколько значений заданного формата и возвращают результат в том же формате. Масштаб объектаBigDecimalэквивалентен экспоненте значения IEEE 754, взятой с противоположным знаком. ЗначенияBigDecimalне имеют формата в том же смысле: все значения имеют один и тот же возможный диапазон масштаба/экспоненты, а немасштабированное значение имеет произвольную точность. Вместо этого для операцийBigDecimal, принимающих параметрMathContext, еслиMathContextимеет ненулевую точность, множество возможных представимых значений результата определяется точностью аргументаMathContext. Например, вBigDecimalпри умножении ненулевого трехзначного числа на ненулевое четырехзначное число в контексте объектаMathContextс точностью три результат будет содержать три цифры (если не произойдут переполнение или потеря значимости и т. д.).Правила округления, реализованные в операциях
BigDecimalи обозначенные режимами округления, являются надмножеством атрибутов направления округления IEEE 754.Арифметика
BigDecimalбудет наиболее похожа на десятичную арифметику IEEE 754, если для округления всех исходных значений и промежуточных операций использоватьMathContext, соответствующий десятичному формату IEEE 754, например decimal64 или decimal128. Вычисленные числовые значения могут различаться, если превышен диапазон экспонент аппроксимируемого формата IEEE 754, посколькуMathContextне ограничивает масштаб результатовBigDecimal. Операции, которые привели бы к NaN или точной бесконечности, например деление на ноль, в арифметикеBigDecimalвыбрасываютArithmeticException.Алгоритмическая сложность
Операции над значениямиBigDecimalимеют разную алгоритмическую сложность; в целом она зависит как от размера немасштабированного значения, так и от размера масштаба. Например, точное умножение двух значенийBigDecimalподчиняется тем же ограничениям сложности, что и умножениеBigIntegerих немасштабированных значений. В отличие от этого, значениеBigDecimalс компактным представлением, напримерnew BigDecimal(1E-1000000000), при вызовеtoPlainString()может дать результат длиной более миллиарда символов.Операции также могут выделять память для промежуточных результатов и выполнять над ними вычисления; объем выделяемой памяти потенциально может быть пропорционален времени выполнения алгоритма.
Пользователи
BigDecimal, заинтересованные в ограничении времени выполнения или объема памяти для операций, могут отфильтровывать значенияBigDecimal, немасштабированные значения или масштабы которых превышают выбранную величину. - Начиная с версии:
- 1.1
- Внешние спецификации
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final BigDecimal |
ONE |
Значение 1 с масштабом 0. |
static final int |
ROUND_CEILING |
Устарело. |
static final int |
ROUND_DOWN |
Устарело. Вместо этого используйте RoundingMode.DOWN. |
static final int |
ROUND_FLOOR |
Устарело. Вместо этого используйте RoundingMode.FLOOR. |
static final int |
ROUND_HALF_DOWN |
Устарело. Вместо этого используйте RoundingMode.HALF_DOWN. |
static final int |
ROUND_HALF_EVEN |
Устарело. Вместо этого используйте RoundingMode.HALF_EVEN. |
static final int |
ROUND_HALF_UP |
Устарело. Вместо этого используйте RoundingMode.HALF_UP. |
static final int |
ROUND_UNNECESSARY |
Устарело. Вместо этого используйте RoundingMode.UNNECESSARY. |
static final int |
ROUND_UP |
Устарело. Вместо этого используйте RoundingMode.UP. |
static final BigDecimal |
TEN |
Значение 10 с масштабом 0. |
static final BigDecimal |
TWO |
Значение 2 с масштабом 0. |
static final BigDecimal |
ZERO |
Значение 0 с масштабом 0. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BigDecimal |
Преобразует представление BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String). |
BigDecimal |
Преобразует представление BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), и позволяя указать подмассив. |
BigDecimal |
Преобразует представление BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), позволяя указать подмассив и выполняя округление согласно настройкам контекста. |
BigDecimal |
Преобразует представление BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), и выполняя округление согласно настройкам контекста. |
BigDecimal |
Преобразует double в BigDecimal, являющееся точным десятичным представлением двоичного значения с плавающей запятой типа double. |
BigDecimal |
Преобразует double в BigDecimal с округлением согласно настройкам контекста. |
BigDecimal |
Преобразует int в BigDecimal. |
BigDecimal |
Преобразует int в BigDecimal с округлением согласно настройкам контекста. |
BigDecimal |
Преобразует long в BigDecimal. |
BigDecimal |
Преобразует long в BigDecimal с округлением согласно настройкам контекста. |
BigDecimal |
Преобразует строковое представление BigDecimal в BigDecimal. |
BigDecimal |
Преобразует строковое представление BigDecimal в BigDecimal, принимая те же строки, что и конструктор BigDecimal(String), с округлением согласно настройкам контекста. |
BigDecimal |
Преобразует BigInteger в BigDecimal. |
BigDecimal |
Преобразует немасштабированное значение BigInteger и масштаб int в BigDecimal. |
BigDecimal |
Преобразует немасштабированное значение BigInteger и масштаб int в BigDecimal с округлением согласно настройкам контекста. |
BigDecimal |
Преобразует BigInteger в BigDecimal с округлением согласно настройкам контекста. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
BigDecimal |
abs() |
Возвращает BigDecimal, значение которого равно абсолютному значению этого BigDecimal, а масштаб равен this.scale(). |
BigDecimal |
abs |
Возвращает BigDecimal, значение которого равно абсолютному значению этого BigDecimal, с округлением согласно настройкам контекста. |
BigDecimal |
add |
Возвращает BigDecimal, значение которого равно (this +
augend), а масштаб равен max(this.scale(),
augend.scale()). |
BigDecimal |
add |
Возвращает BigDecimal, значение которого равно (this + augend), с округлением согласно настройкам контекста. |
byte |
byteValueExact() |
Преобразует этот BigDecimal в byte, проверяя, не потеряна ли информация. |
int |
compareTo |
Сравнивает этот BigDecimal с указанным BigDecimal по числовому значению. |
BigDecimal |
divide |
Возвращает BigDecimal, значение которого равно (this /
divisor), а предпочтительный масштаб равен (this.scale() -
divisor.scale()); если точное частное нельзя представить (из-за бесконечного десятичного разложения), выбрасывается ArithmeticException. |
BigDecimal |
divide |
Устарело. Вместо этого устаревшего метода следует использовать метод divide(BigDecimal, RoundingMode). |
BigDecimal |
divide |
Устарело. Вместо этого устаревшего метода следует использовать метод divide(BigDecimal, int, RoundingMode). |
BigDecimal |
divide |
Возвращает BigDecimal, значение которого равно (this /
divisor), а масштаб задан указанным значением. |
BigDecimal |
divide |
Возвращает BigDecimal, значение которого равно (this /
divisor), с округлением согласно настройкам контекста. |
BigDecimal |
divide |
Возвращает BigDecimal, значение которого равно (this /
divisor), а масштаб равен this.scale(). |
BigDecimal[] |
divideAndRemainder |
Возвращает массив BigDecimal из двух элементов: результат divideToIntegralValue, за которым следует результат remainder для двух операндов. |
BigDecimal[] |
divideAndRemainder |
Возвращает массив BigDecimal из двух элементов: результат divideToIntegralValue, за которым следует результат remainder для двух операндов, вычисленный с округлением согласно настройкам контекста. |
BigDecimal |
divideToIntegralValue |
Возвращает BigDecimal, значением которого является округлённая вниз целая часть частного (this / divisor). |
BigDecimal |
divideToIntegralValue |
Возвращает BigDecimal, значением которого является целая часть (this / divisor). |
double |
doubleValue() |
Преобразует этот BigDecimal в double. |
boolean |
equals |
Проверяет, равен ли этот 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 |
min |
Возвращает минимум из этого BigDecimal и val. |
BigDecimal |
movePointLeft |
Возвращает BigDecimal, эквивалентное этому значению, но с десятичной точкой, сдвинутой влево на n позиций. |
BigDecimal |
movePointRight |
Возвращает BigDecimal, эквивалентное этому значению, но с десятичной точкой, сдвинутой вправо на n позиций. |
BigDecimal |
multiply |
Возвращает BigDecimal, значение которого равно (this ×
multiplicand), а масштаб равен (this.scale() +
multiplicand.scale()). |
BigDecimal |
multiply |
Возвращает BigDecimal, значение которого равно (this ×
multiplicand), с округлением согласно настройкам контекста. |
BigDecimal |
negate() |
Возвращает BigDecimal, значение которого равно (-this), а масштаб равен this.scale(). |
BigDecimal |
negate |
Возвращает BigDecimal, значение которого равно (-this), с округлением согласно настройкам контекста. |
BigDecimal |
plus() |
Возвращает BigDecimal, значение которого равно (+this), а масштаб равен this.scale(). |
BigDecimal |
plus |
Возвращает BigDecimal, значение которого равно (+this), с округлением согласно настройкам контекста. |
BigDecimal |
pow |
Возвращает BigDecimal, значение которого равно (thisn). Возведение в степень выполняется точно, с неограниченной точностью. |
BigDecimal |
pow |
Возвращает BigDecimal, значение которого равно (thisn). |
int |
precision() |
Возвращает точность этого BigDecimal. |
BigDecimal |
remainder |
Возвращает BigDecimal, значение которого равно (this % divisor). |
BigDecimal |
remainder |
Возвращает BigDecimal, значение которого равно (this %
divisor), с округлением согласно настройкам контекста. |
BigDecimal |
round |
Возвращает BigDecimal, округлённое согласно настройкам MathContext. |
int |
scale() |
Возвращает масштаб этого BigDecimal. |
BigDecimal |
scaleByPowerOfTen |
Возвращает BigDecimal, числовое значение которого равно ( this * 10n). |
BigDecimal |
setScale |
Возвращает BigDecimal с указанным масштабом и числовым значением, равным значению этого BigDecimal. |
BigDecimal |
setScale |
Устарело. Вместо этого устаревшего метода следует использовать метод setScale(int, RoundingMode). |
BigDecimal |
setScale |
Возвращает BigDecimal с указанным масштабом; немасштабированное значение определяется умножением или делением немасштабированного значения этого BigDecimal на соответствующую степень десяти, чтобы сохранить общее значение. |
short |
shortValueExact() |
Преобразует этот BigDecimal в short, проверяя, не потеряна ли информация. |
int |
signum() |
Возвращает значение функции signum для этого BigDecimal. |
BigDecimal |
sqrt |
Возвращает приближённое значение квадратного корня из this с округлением согласно настройкам контекста. |
BigDecimal |
stripTrailingZeros() |
Возвращает BigDecimal, численно равное этому значению, но с удалёнными завершающими нулями в представлении. |
BigDecimal |
subtract |
Возвращает BigDecimal, значение которого равно (this -
subtrahend), а масштаб равен max(this.scale(),
subtrahend.scale()). |
BigDecimal |
subtract |
Возвращает 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 в BigDecimal, используя каноническое строковое представление double, предоставляемое методом Double.toString(double). |
static BigDecimal |
valueOf |
Преобразует значение long в BigDecimal с масштабом 0. |
static BigDecimal |
valueOf |
Преобразует немасштабированное значение long и масштаб int в BigDecimal. |
Методы, объявленные в классе Number
byteValue, shortValue
Подробное описание полей
ZERO
public static final BigDecimal ZERO
- Начиная с версии:
- 1.5
ONE
public static final BigDecimal ONE
- Начиная с версии:
- 1.5
TWO
public static final BigDecimal TWO
- Начиная с версии:
- 19
TEN
public static final BigDecimal TEN
- Начиная с версии:
- 1.5
ROUND_UP
@Deprecated(since="9") public static final int ROUND_UP
RoundingMode.UP.- См. также:
ROUND_DOWN
@Deprecated(since="9") public static final int ROUND_DOWN
RoundingMode.DOWN.- См. также:
ROUND_CEILING
@Deprecated(since="9") public static final int ROUND_CEILING
RoundingMode.CEILING.BigDecimal положительно, действует как ROUND_UP; если отрицательно — как ROUND_DOWN. Обратите внимание, что этот режим округления никогда не уменьшает вычисленное значение.- См. также:
ROUND_FLOOR
@Deprecated(since="9") public static final int ROUND_FLOOR
RoundingMode.FLOOR.BigDecimal положительно, действует как ROUND_DOWN; если отрицательно — как ROUND_UP. Обратите внимание, что этот режим округления никогда не увеличивает вычисленное значение.- См. также:
ROUND_HALF_UP
@Deprecated(since="9") public static final int ROUND_HALF_UP
RoundingMode.HALF_UP.ROUND_UP, если отбрасываемая дробная часть ≥ 0.5; в противном случае действует как ROUND_DOWN. Обратите внимание, что именно этому режиму округления большинство из нас учится в школе.- См. также:
ROUND_HALF_DOWN
@Deprecated(since="9") public static final int ROUND_HALF_DOWN
RoundingMode.HALF_DOWN.ROUND_UP, если отбрасываемая дробная часть > 0.5; в противном случае действует как ROUND_DOWN.- См. также:
ROUND_HALF_EVEN
@Deprecated(since="9") public static final int ROUND_HALF_EVEN
RoundingMode.HALF_EVEN.ROUND_HALF_UP, если цифра слева от отбрасываемой дробной части нечетная; действует как ROUND_HALF_DOWN, если она четная. Обратите внимание, что этот режим округления минимизирует накопление ошибки при многократном применении в последовательности вычислений.- См. также:
ROUND_UNNECESSARY
@Deprecated(since="9") public static final int ROUND_UNNECESSARY
RoundingMode.UNNECESSARY.ArithmeticException.- См. также:
Подробное описание конструкторов
BigDecimal
public BigDecimal(char[] in, int offset, int len)
BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), и позволяя указать подмассив.- Примечание по реализации:
- Если последовательность символов уже доступна в массиве символов, этот конструктор работает быстрее, чем преобразование массива
charв строку и использование конструктораBigDecimal(String). - Параметры:
-
in— массивchar, содержащий исходные символы. -
offset— первый символ массива, который необходимо проверить. -
len— количество символов, которые необходимо учитывать. - Выбрасывает:
-
NumberFormatException— еслиinне является допустимым представлениемBigDecimalили заданный подмассив целиком не входит вin. - Начиная с версии:
- 1.5
BigDecimal
public BigDecimal(char[] in, int offset, int len, MathContext mc)
BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), позволяя указать подмассив и выполняя округление в соответствии с настройками контекста.- Примечание по реализации:
- Если последовательность символов уже доступна в массиве символов, этот конструктор работает быстрее, чем преобразование массива
charв строку и использование конструктораBigDecimal(String). - Параметры:
-
in— массивchar, содержащий исходные символы. -
offset— первый символ массива, который необходимо проверить. -
len— количество символов, которые необходимо учитывать. -
mc— используемый контекст. - Выбрасывает:
-
NumberFormatException— еслиinне является допустимым представлениемBigDecimalили заданный подмассив целиком не входит вin. - Начиная с версии:
- 1.5
BigDecimal
public BigDecimal(char[] in)
BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String).- Примечание по реализации:
- Если последовательность символов уже доступна в виде массива символов, этот конструктор работает быстрее, чем преобразование массива
charв строку и использование конструктораBigDecimal(String). - Параметры:
-
in— массивchar, содержащий исходные символы. - Выбрасывает:
-
NumberFormatException— еслиinне является допустимым представлениемBigDecimal. - Начиная с версии:
- 1.5
BigDecimal
public BigDecimal(char[] in, MathContext mc)
BigDecimal в виде массива символов в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), и выполняя округление в соответствии с настройками контекста.- Примечание по реализации:
- Если последовательность символов уже доступна в виде массива символов, этот конструктор работает быстрее, чем преобразование массива
charв строку и использование конструктораBigDecimal(String). - Параметры:
-
in— массивchar, содержащий исходные символы. -
mc— используемый контекст. - Выбрасывает:
-
NumberFormatException— еслиinне является допустимым представлениемBigDecimal. - Начиная с версии:
- 1.5
BigDecimal
public BigDecimal(String val)
BigDecimal в BigDecimal. Строковое представление состоит из необязательного знака, '+' ( '\u002B') или '-' ('\u002D'), за которым следует последовательность из нуля или более десятичных цифр («целая часть»), необязательная дробная часть и необязательная экспонента. Дробная часть состоит из десятичной точки, за которой следует ноль или более десятичных цифр. Строка должна содержать хотя бы одну цифру в целой или дробной части. Число, образованное знаком, целой и дробной частями, называется значащей частью.
Экспонента состоит из символа 'e' ('\u0065') или 'E' ('\u0045'), за которым следует одна или более десятичных цифр.
Формально строки, принимаемые этим конструктором, описываются следующей грамматикой:
- СтрокаBigDecimal:
- Знакopt ЗначащаяЧасть Экспонентаopt
- Знак:
+-- ЗначащаяЧасть:
- ЦелаяЧасть
.ДробнаяЧастьopt.ДробнаяЧасть- ЦелаяЧасть
- ЦелаяЧасть:
- Цифры
- ДробнаяЧасть:
- Цифры
- Экспонента:
- ИндикаторЭкспоненты ЦелоеЧислоСоЗнаком
- ИндикаторЭкспоненты:
eE- ЦелоеЧислоСоЗнаком:
- Знакopt Цифры
- Цифры:
- Цифра
- Цифры Цифра
- Цифра:
- любой символ, для которого
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иdoubleNaN и ±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— используемый контекст. - Выбрасывает:
-
NumberFormatException— еслиvalне является допустимым представлением BigDecimal. - Начиная с версии:
- 1.5
BigDecimal
public BigDecimal(double val)
double в BigDecimal, представляющий точное десятичное значение двоичного числа с плавающей точкой double. Масштаб возвращаемого BigDecimal — наименьшее значение, при котором (10scale × val) является целым числом. Примечания:
- Результаты этого конструктора могут быть несколько непредсказуемыми. Можно предположить, что запись
new BigDecimal(0.1)в Java создаетBigDecimal, точно равный 0.1 (немасштабированное значение 1 с масштабом 1), но на самом деле он равен 0.1000000000000000055511151231257827021181583404541015625. Это происходит потому, что 0.1 нельзя представить точно в видеdouble(как, впрочем, и в виде двоичной дроби конечной длины). Таким образом, значение, передаваемое в конструктор, на самом деле не равно 0.1, несмотря на внешнее впечатление. - С другой стороны, конструктор
Stringсовершенно предсказуем: записьnew BigDecimal("0.1")создаетBigDecimal, точно равный 0.1, как и ожидается. Поэтому обычно рекомендуется отдавать предпочтение конструктору String. - Если в качестве источника для
BigDecimalнеобходимо использоватьdouble, учтите, что этот конструктор выполняет точное преобразование; результат будет отличаться от результата преобразованияdoubleвStringс помощью методаDouble.toString(double)с последующим использованием конструктораBigDecimal(String). Чтобы получить такой результат, используйте методstaticvalueOf(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— используемый контекст. - Выбрасывает:
-
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— используемый контекст. - Начиная с версии:
- 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— используемый контекст. - Начиная с версии:
- 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— используемый контекст. - Начиная с версии:
- 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— используемый контекст. - Начиная с версии:
- 1.5
Подробное описание методов
valueOf
public static BigDecimal valueOf(long unscaledVal, int scale)
long и масштаб int в BigDecimal.- Примечание к API:
- Этот статический фабричный метод предпочтительнее конструктора (
long,int), поскольку позволяет повторно использовать часто встречающиеся значенияBigDecimal. - Параметры:
-
unscaledVal— немасштабированное значениеBigDecimal. -
scale— масштабBigDecimal. - Возвращает:
BigDecimal, значение которого равно(unscaledVal × 10-scale).
valueOf
public static BigDecimal valueOf(long val)
long в BigDecimal с нулевым масштабом.- Примечание к API:
- Этот статический фабричный метод предпочтительнее конструктора (
long), поскольку позволяет повторно использовать часто встречающиеся значенияBigDecimal. - Параметры:
-
val— значениеBigDecimal. - Возвращает:
BigDecimal, значение которого равноval.
valueOf
public static BigDecimal valueOf(double val)
double в BigDecimal, используя каноническое строковое представление double, предоставляемое методом Double.toString(double).- Примечание к API:
- Как правило, это предпочтительный способ преобразования
double(илиfloat) вBigDecimal, поскольку возвращаемое значение равно результату созданияBigDecimalиз результата вызоваDouble.toString(double). - Параметры:
-
val— значениеdouble, преобразуемое вBigDecimal. - Возвращает:
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, при необходимости округленное. - Начиная с версии:
- 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, при необходимости округленное. - Начиная с версии:
- 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, при необходимости округлённое. - Начиная с:
- 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не соответствует допустимому режиму округления. - См. также:
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не соответствует допустимому режиму округления. - См. также:
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)). Обратите внимание: это не операция взятия по модулю (результат может быть отрицательным).
- Параметры:
-
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)). Обратите внимание: это не операция взятия по модулю (результат может быть отрицательным).
- Параметры:
-
divisor— значение, на которое делится этотBigDecimal. -
mc— используемый контекст. - Возвращает:
-
this % divisor, при необходимости округлённое. - Выбрасывает:
-
ArithmeticException— еслиdivisor==0 -
ArithmeticException— если результат неточный, но режим округления —UNNECESSARY, либо еслиmc.precision> 0 и для результатаthis.divideToIntegralValue(divisor)требуется точность более чем вmc.precisionцифр. - Начиная с:
- 1.5
- См. также:
divideAndRemainder
public BigDecimal[] divideAndRemainder(BigDecimal divisor)
BigDecimal из двух элементов, содержащий результат divideToIntegralValue, а затем результат remainder для двух операндов. Обратите внимание: если нужны и целое частное, и остаток, этот метод работает быстрее, чем отдельный вызов методов divideToIntegralValue и remainder, поскольку деление выполняется только один раз.
- Параметры:
-
divisor— значение, на которое делится этотBigDecimalи для которого вычисляется остаток. - Возвращает:
- массив
BigDecimalиз двух элементов: частное (результатdivideToIntegralValue) является первым элементом, а остаток — последним. - Выбрасывает:
-
ArithmeticException— еслиdivisor==0 - Начиная с:
- 1.5
- См. также:
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.divideToIntegralValue(divisor)требуется точность более чем вmc.precisionцифр. - Начиная с:
- 1.5
- См. также:
sqrt
public BigDecimal sqrt(MathContext mc)
this с округлением согласно настройкам контекста. Предпочтительный масштаб возвращаемого результата равен this.scale()/2. Значение возвращаемого результата всегда отличается от точного десятичного значения для заданной точности не более чем на одну единицу последнего разряда (ulp). Если режим округления — 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
- См. также:
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), при необходимости округлённое. - Начиная с:
- 1.5
negate
public BigDecimal negate()
BigDecimal, значение которого равно (-this), а масштаб равен this.scale().- Возвращает:
-
-this.
negate
public BigDecimal negate(MathContext mc)
BigDecimal, значение которого равно (-this); округление выполняется согласно настройкам контекста.- Параметры:
-
mc— используемый контекст. - Возвращает:
-
-this, при необходимости округлённое. - Начиная с:
- 1.5
plus
public BigDecimal plus()
BigDecimal, значение которого равно (+this), а масштаб равен this.scale(). Этот метод, который просто возвращает данный BigDecimal, включён для симметрии с унарным минусом — методом negate().
- Возвращает:
-
this. - Начиная с:
- 1.5
- См. также:
plus
public BigDecimal plus(MathContext mc)
BigDecimal, значение которого равно (+this); округление выполняется согласно настройкам контекста. Действие этого метода идентично действию метода round(MathContext).
- Параметры:
-
mc— используемый контекст. - Возвращает:
-
this, при необходимости округлённое. Для нулевого результата масштаб будет равен 0. - Начиная с:
- 1.5
- См. также:
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.- Начиная с:
- 1.5
- См. также:
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
- См. также:
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не соответствует допустимому режиму округления. - См. также:
setScale
public BigDecimal setScale(int newScale)
BigDecimal с указанным масштабом и численно равным значением этого BigDecimal. Если это невозможно, выбрасывается ArithmeticException. Этот вызов обычно используется для увеличения масштаба; в этом случае гарантируется существование BigDecimal с указанным масштабом и правильным значением. Вызов также можно использовать для уменьшения масштаба, если вызывающий код знает, что BigDecimal содержит достаточно нулей в конце дробной части (то есть множителей десяти в целом значении), чтобы изменить масштаб без изменения значения.
Этот метод возвращает тот же результат, что и двухаргументные версии setScale, но избавляет вызывающий код от необходимости указывать режим округления в случаях, когда он не имеет значения.
- Примечание API:
- Поскольку объекты
BigDecimalнеизменяемы, вызовы этого метода не приводят к изменению исходного объекта, вопреки обычному соглашению, согласно которому методы с именамиsetXизменяют полеX. Вместо этогоsetScaleвозвращает объект с нужным масштабом; возвращённый объект может быть как новым, так и уже существующим. - Параметры:
-
newScale— масштаб возвращаемого значенияBigDecimal. - Возвращает:
BigDecimalс указанным масштабом и немасштабированным значением, определённым умножением или делением немасштабированного значения этогоBigDecimalна соответствующую степень десяти для сохранения его общего значения.- Исключения:
-
ArithmeticException— если для указанной операции изменения масштаба требуется округление. - См. также:
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)
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без завершающих нулей. - Исключения:
-
ArithmeticException— при переполнении масштаба. - Начиная с версии:
- 1.5
compareTo
public int compareTo(BigDecimal val)
BigDecimal с указанным BigDecimal по числовому значению. Два объекта BigDecimal с равными значениями, но разными масштабами (например, 2.0 и 2.00), этот метод считает равными. Такие значения относятся к одной когорте. Этот метод предпочтительнее отдельных методов для каждого из шести операторов сравнения логических значений (<, ==, >, >=, !=, <=). Рекомендуемый способ выполнения этих сравнений:
(x.compareTo(y) <op> 0), где <op> — один из шести операторов сравнения.- Определено в:
-
compareToв интерфейсеComparable<BigDecimal> - Примечание API:
- Обратите внимание: естественный порядок сортировки этого класса не согласуется с equals. Поведение при сравнении результата этого метода с 0 на равенство аналогично проверке числового равенства значений
double. - Параметры:
-
val—BigDecimal, с которым сравнивается этоBigDecimal. - Возвращает:
- -1, 0 или 1, если это
BigDecimalчисленно меньше, равно или большеval.
equals
public boolean equals(Object x)
BigDecimal с указанным
Object на равенство. В отличие от compareTo, этот метод считает два объекта BigDecimal равными, только если их значения и масштабы совпадают. Поэтому при сравнении этим методом 2.0 не равно 2.00: компоненты [BigInteger, scale] первого равны [20, 1], а компоненты второго равны [200, 2].- Переопределяет:
-
equalsв классеObject - Примечание API:
- Примером того, что 2.0 и 2.00 не являются взаимозаменяемыми в некоторых арифметических операциях, служат два выражения:
new BigDecimal("2.0" ).divide(BigDecimal.valueOf(3), HALF_UP), результат которого равен 0.7, и
new BigDecimal("2.00").divide(BigDecimal.valueOf(3), HALF_UP), результат которого равен 0.67. Поведение этого метода аналогично проверке эквивалентности представления значенийdouble. - Параметры:
-
x—Object, с которым сравнивается этоBigDecimal. - Возвращает:
-
trueтогда и только тогда, когда указанныйObjectявляетсяBigDecimal, значение и масштаб которого равны значению и масштабу этогоBigDecimal. - См. также:
min
public BigDecimal min(BigDecimal val)
BigDecimal и val.- Параметры:
-
val— значение, с которым вычисляется минимум. - Возвращает:
BigDecimal, значение которого меньше из значений этогоBigDecimalиval. Если они равны согласно методуcompareTo, возвращаетсяthis.- См. также:
max
public BigDecimal max(BigDecimal val)
BigDecimal и val.- Параметры:
-
val— значение, с которым вычисляется максимум. - Возвращает:
BigDecimal, значение которого больше из значений этогоBigDecimalиval. Если они равны согласно методуcompareTo, возвращаетсяthis.- См. также:
hashCode
public int hashCode()
BigDecimal. Хеш-код вычисляется на основе немасштабированного значения и масштаба этого BigDecimal.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"Примечания:
- Между различимыми значениями
BigDecimalи результатом этого преобразования существует взаимно однозначное соответствие. Иными словами, каждому различимому значениюBigDecimal(немасштабированному значению и масштабу) соответствует уникальное строковое представление, полученное с помощьюtoString. Если преобразовать это строковое представление обратно вBigDecimalс помощью конструктораBigDecimal(String), исходное значение будет восстановлено. - Строка, создаваемая для заданного числа, всегда одинакова и не зависит от локали. Это означает, что её можно использовать как каноническое строковое представление для обмена десятичными данными или в качестве ключа Hashtable и т. д. Форматирование и разбор чисел с учётом локали выполняются классом
NumberFormatи его подклассами. - Метод
toEngineeringString()можно использовать для представления чисел с показателями степени в инженерной нотации, а методsetScale— для округленияBigDecimalдо заданного количества цифр после десятичной точки. - Используется сопоставление цифр символам, предоставляемое
Character.forDigit.
toEngineeringString
public String toEngineeringString()
BigDecimal, используя инженерную нотацию, если требуется показатель степени. Возвращает строку, представляющую BigDecimal, как описано в методе toString(), за исключением того, что при использовании экспоненциальной нотации степень десяти корректируется до значения, кратного трём (инженерная нотация), так что целая часть ненулевых значений находится в диапазоне от 1 до 999. Если для нулевых значений используется экспоненциальная нотация, добавляется десятичная точка и одна или две нулевые цифры дробной части, чтобы сохранить масштаб нулевого значения. Обратите внимание: в отличие от результата toString(), результат этого метода не гарантирует восстановление той же пары [целое число, масштаб] для этого BigDecimal при преобразовании выходной строки обратно в BigDecimal с помощью строкового конструктора. Метод гарантирует более слабое свойство: применение строкового конструктора к результату метода всегда даёт численно равное значение.
- Возвращает:
- строковое представление этого
BigDecimal, использующее инженерную нотацию, если требуется показатель степени. - Начиная с версии:
- 1.5
toPlainString
public String toPlainString()
BigDecimal без поля показателя степени. Для значений с положительным масштабом количество цифр справа от десятичной точки указывает масштаб. Для значений с нулевым или отрицательным масштабом результирующая строка создаётся так, как если бы значение было преобразовано в численно равное значение с нулевым масштабом и все завершающие нули этого значения с нулевым масштабом присутствовали в результате. Перед всей строкой ставится знак минус '-' ('\u002D'), если немасштабированное значение меньше нуля. Если немасштабированное значение равно нулю или положительно, знак не ставится. Обратите внимание: если результат этого метода передать строковому конструктору string constructor, обязательно будет восстановлено только числовое значение этого BigDecimal; представление нового BigDecimal может иметь другой масштаб. В частности, если масштаб этого BigDecimal отрицателен, строка, полученная этим методом, при обработке строковым конструктором будет иметь масштаб, равный нулю. (Этот метод работает аналогично методу toString в версии 1.4 и более ранних выпусках.)- Возвращает:
- строковое представление этого
BigDecimalбез поля показателя степени. - Начиная с версии:
- 1.5
- См. также:
toBigInteger
public BigInteger toBigInteger()
BigDecimal в BigInteger. Это преобразование аналогично сужающему примитивному преобразованию из double в long, определённому в Спецификации языка Java: дробная часть этого BigDecimal отбрасывается. Обратите внимание, что при таком преобразовании может быть потеряна информация о точности значения BigDecimal. Чтобы при преобразовании с потерей точности (то есть при отбрасывании ненулевой дробной части) выбрасывалось исключение, используйте метод toBigIntegerExact().
- Возвращает:
- это
BigDecimal, преобразованное вBigInteger. - См. Спецификацию языка Java:
- 5.1.3 Сужающее примитивное преобразование
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. - См. Спецификацию языка Java:
- 5.1.3 Сужающее примитивное преобразование
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. - См. Спецификацию языка Java:
- 5.1.3 Сужающее примитивное преобразование
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. - См. Спецификацию языка Java:
- 5.1.3 Сужающее примитивное преобразование
doubleValue
public double doubleValue()
BigDecimal в double. Это преобразование аналогично сужающему преобразованию примитивного типа из double в float, определенному в Спецификации языка Java: если величина этого BigDecimal слишком велика для представления в виде double, оно будет преобразовано в Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY в зависимости от ситуации. Обратите внимание, что даже если возвращаемое значение является конечным, это преобразование может привести к потере информации о точности значения BigDecimal.- Определено в:
-
doubleValueв классеNumber - Возвращает:
- этот
BigDecimal, преобразованный вdouble. - См. Спецификацию языка Java:
- 5.1.3 Сужающее преобразование примитивного типа
ulp
public BigDecimal ulp()
BigDecimal. ULP ненулевого значения BigDecimal — это положительное расстояние между этим значением и значением BigDecimal, которое больше по модулю и имеет то же количество цифр. ULP нулевого значения численно равен 1 с масштабом this. Результат хранится с тем же масштабом, что и this, поэтому результат для нулевых и ненулевых значений равен [1,
this.scale()].- Возвращает:
- размер ULP для
this - Начиная с версии:
- 1.5
© 1993, 2025, 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/25/docs/api/java.base/java/math/BigDecimal.html
RoundingMode.CEILING.