Класс 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() |
| Квадратный корень | ceil(radicand.scale()/2.0) |
| Корень n-й степени | ceil((double) radicand.scale()/n) |
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, созданный из операнда путём перемещения десятичной точки на заданное расстояние в указанном направлении.
Масштаб представлен 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 |
rootn |
Возвращает приближённое значение корня n-й степени из this с округлением согласно настройкам контекста. |
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() |
Возвращает функцию знака для этого 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 с нулевым масштабом. |
static BigDecimal |
valueOf |
Преобразует ненормализованное значение типа long и масштаб типа int в BigDecimal. |
Методы, объявленные в классе Number
byteValue, shortValue | Модификатор и тип | Метод | Описание |
|---|---|---|
byte |
byteValue() |
Возвращает значение указанного числа как byte. |
short |
shortValue() |
Возвращает значение указанного числа как short. |
Методы, объявленные в классе Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного интервала реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного интервала реального времени. |
Подробное описание полей
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'), за которым следует одна или более десятичных цифр.
Более формально, строки, принимаемые этим конструктором, описываются следующей грамматикой:
- BigDecimalString:
- Signopt Significand Exponentopt
- Sign:
+-- Significand:
- IntegerPart
.FractionPartopt.FractionPart- IntegerPart
- IntegerPart:
- Digits
- FractionPart:
- Digits
- Exponent:
- ExponentIndicator SignedInteger
- ExponentIndicator:
eE- 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и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. - Если
doubleнеобходимо использовать как источник дляBigDecimal, учтите, что этот конструктор выполняет точное преобразование; его результат не совпадает с результатом преобразования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 с масштабом 0.- Примечание к API:
- Этот статический фабричный метод рекомендуется вместо конструктора (
long), поскольку позволяет повторно использовать часто встречающиеся значенияBigDecimal. - Параметры:
-
val— значениеBigDecimal. - Возвращает:
BigDecimal, значение которого равноval.
valueOf
public static BigDecimal valueOf(double val)
double в BigDecimal, используя каноническое строковое представление double, предоставляемое методом Double.toString(double).- Примечание к API:
- Как правило, это предпочтительный способ преобразования
doubleвBigDecimal, поскольку возвращаемое значение равно результату созданияBigDecimalиз результата вызоваDouble.toString(double).Хотя аргумент
floatvможно передать этому методу, результат часто содержит намного больше завершающих цифр, чем точностьfloat. Рассмотрите возможность использования вместо негоnew BigDecimal(Float.toString(v)). - Параметры:
-
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, округлённое согласно настройкам контекста. Предпочтительный масштаб возвращаемого результата равен Math.ceilDiv(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
- См. также:
rootn
public BigDecimal rootn(int n, MathContext mc)
n-й степени из this, округлённое согласно настройкам контекста. Предпочтительный масштаб возвращаемого результата равен Math.ceilDiv(this.scale(), n). Значение возвращаемого результата всегда отличается от точного десятичного значения для заданной точности не более чем на одну единицу последнего разряда. Если режим округления — HALF_UP, HALF_DOWN или HALF_EVEN, результат отличается от точного десятичного значения не более чем на половину единицы последнего разряда.
Особый случай:
- Корень
n-й степени из числа, численно равногоZERO, численно равенZEROи имеет предпочтительный масштаб, определяемый приведённым выше общим правилом. В частности, дляZEROзначениеZERO.rootn(n, mc).equals(ZERO)истинно при любомMathContextв качестве аргумента.
- Примечание к API:
- Обратите внимание, что вызов
rootn(2, mc)эквивалентен вызовуsqrt(mc). - Параметры:
-
n— степень корня -
mc— используемый контекст. - Возвращает:
- корень
n-й степени изthis. - Исключения:
-
ArithmeticException— еслиn == 0 || n == Integer.MIN_VALUE. -
ArithmeticException— еслиnчётное, аthisотрицательное. -
ArithmeticException— еслиnотрицательное, аthisравно нулю. -
ArithmeticException— если запрошен точный результат (mc.getPrecision() == 0), но точный результат не имеет конечного десятичного представления -
ArithmeticException— если(mc.getRoundingMode() == RoundingMode.UNNECESSARY), а точный результат не умещается вmc.getPrecision()цифр. - Начиная с:
- 27
- См. также:
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'). Если значение без масштаба равно нулю или положительно, знак не ставится. Обратите внимание: если передать результат этого метода в строковый конструктор, будет восстановлено только числовое значение этого 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.
RoundingMode.CEILING.