Spec-Zone.ru › OpenJDK 17

Класс BigDecimal

java.lang.Object
java.lang.Number
java.math.BigDecimal
Все реализованные интерфейсы:
Serializable, Comparable<BigDecimal>
public class BigDecimal extends Number implements Comparable<BigDecimal>
Неизменяемые, десятичные числа со произвольной точностью и знаком. A BigDecimal состоит из целого числа произвольной точности неизменённое значение и 32-битного целого числа масштаб. Если значение масштаба положительно или равно нулю, он представляет количество цифр справа от десятичной точки. Если отрицательно, неизменённое значение числа умножается на 10 в степени, равной модулю масштаба. Значение числа, представленного 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(), будут отличаться для численных значений с различными представлениями.

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

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

Для методов и конструкторов с параметром MathContext, если результат неточен, но режим округления - UNNECESSARY, выбрасывается ArithmeticException.

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

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

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

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

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

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

В качестве 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 не имеют формата в том же смысле; все значения имеют тот же возможный диапазон разрядности/показателя степени, а немасштабированное значение (unscaled value) имеет произвольную точность. Вместо этого, для операций BigDecimal, принимающих параметр MathContext, если у MathContext есть ненулевая точность, множество возможных представимых значений для результата определяется точностью аргумента MathContext. Например, в BigDecimal, если два ненулевых числа с тремя и четырьмя цифрами умножаются друг на друга в контексте объекта MathContext с точностью три, результат будет иметь три цифры (при условии, что нет переполнения или недополнения и т.д.).

Правила округления, реализованные операциями BigDecimal, указанные режимами округления, являются надмножеством атрибутов направления округления IEEE 754.

Арифметика BigDecimal будет наиболее похожа на десятичную арифметику IEEE 754, если используется MathContext, соответствующий десятичному формату IEEE 754, например, decimal64 или decimal128, для округления всех начальных значений и промежуточных операций. Вычисленные числовые значения могут отличаться, если диапазон показателя степени приближаемого формата IEEE 754 будет превышен, так как MathContext не ограничивает разрядность результатов BigDecimal. Операции, которые могли бы сгенерировать NaN или точную бесконечность, такие как деление на ноль, вызывают исключение ArithmeticException в арифметике BigDecimal.

С:
1.1
См. также:
  • BigInteger
  • MathContext
  • RoundingMode
  • SortedMap
  • SortedSet
  • Сериализованная форма

Краткое описание полей

Модификатор и тип Поле Описание
static final BigDecimal ONE
Значение 1 со масштабом 0.
static final int ROUND_CEILING
Устаревшее.
Используйте RoundingMode.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 ZERO
Значение 0 со масштабом 0.

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

Конструктор Описание
BigDecimal(char[] in)
Преобразует строковое представление массива символов BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String).
BigDecimal(char[] in, int offset, int len)
Преобразует строковое представление массива символов BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), но позволяя указать подмассив.
BigDecimal(char[] in, int offset, int len, MathContext mc)
Преобразует строковое представление массива символов BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), позволяя указать подмассив и выполняя округление согласно настройкам контекста.
BigDecimal(char[] in, MathContext mc)
Преобразует строковое представление массива символов BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String) и выполняя округление согласно настройкам контекста.
BigDecimal(double val)
Преобразует double в BigDecimal, который представляет собой точное десятичное представление двоичного значения с плавающей запятой double.
BigDecimal(double val, MathContext mc)
Преобразует double в BigDecimal, выполняя округление согласно настройкам контекста.
BigDecimal(int val)
Преобразует int в BigDecimal.
BigDecimal(int val, MathContext mc)
Преобразует int в BigDecimal, выполняя округление согласно настройкам контекста.
BigDecimal(long val)
Преобразует long в BigDecimal.
BigDecimal(long val, MathContext mc)
Преобразует long в BigDecimal, выполняя округление согласно настройкам контекста.
BigDecimal(String val)
Преобразует строковое представление BigDecimal в BigDecimal.
BigDecimal(String val, MathContext mc)
Преобразует строковое представление BigDecimal в BigDecimal, принимая те же строки, что и конструктор BigDecimal(String), с округлением согласно настройкам контекста.
BigDecimal(BigInteger val)
Преобразует BigInteger в BigDecimal.
BigDecimal(BigInteger unscaledVal, int scale)
Преобразует неотмасштабированное значение BigInteger и масштаб int в BigDecimal.
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
Преобразует неотмасштабированное значение BigInteger и масштаб int в BigDecimal, с округлением согласно настройкам контекста.
BigDecimal(BigInteger val, MathContext mc)
Преобразует BigInteger в BigDecimal, выполняя округление согласно настройкам контекста.

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

Модификатор и тип Метод Описание
BigDecimal abs()
Возвращает BigDecimal, значение которого является абсолютным значением этого BigDecimal, а масштаб — this.scale().
BigDecimal abs(MathContext mc)
Возвращает BigDecimal, значение которого является абсолютным значением этого BigDecimal, с округлением в соответствии с настройками контекста.
BigDecimal add(BigDecimal augend)
Возвращает BigDecimal, значение которого равно (this + augend), а масштаб — max(this.scale(), augend.scale()).
BigDecimal add(BigDecimal augend, MathContext mc)
Возвращает BigDecimal, значение которого равно (this + augend), с округлением в соответствии с настройками контекста.
byte byteValueExact()
Преобразует этот BigDecimal в byte, проверяя на потерю информации.
int compareTo(BigDecimal val)
Сравнивает этот BigDecimal численно с указанным BigDecimal.
BigDecimal divide(BigDecimal divisor)
Возвращает BigDecimal, значение которого равно (this / divisor), а предпочтительный масштаб — (this.scale() - divisor.scale()); если точное частное не может быть представлено (потому что оно имеет непериодическое десятичное разложение), выбрасывается ArithmeticException.
BigDecimal divide(BigDecimal divisor, int roundingMode)
Устарело.
Вместо этого устаревшего метода следует использовать метод divide(BigDecimal, RoundingMode).
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
Устарело.
Вместо этого устаревшего метода следует использовать метод divide(BigDecimal, int, RoundingMode).
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб указан.
BigDecimal divide(BigDecimal divisor, MathContext mc)
Возвращает BigDecimal, значение которого равно (this / divisor), с округлением в соответствии с настройками контекста.
BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
Возвращает BigDecimal, значение которого равно (this / divisor), а масштаб — this.scale().
BigDecimal[] divideAndRemainder(BigDecimal divisor)
Возвращает двумерный массив BigDecimal, содержащий результат divideToIntegralValue, а затем результат remainder для двух операндов.
BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
Возвращает двумерный массив BigDecimal, содержащий результат divideToIntegralValue, а затем результат remainder для двух операндов, вычисленный с округлением в соответствии с настройками контекста.
BigDecimal divideToIntegralValue(BigDecimal divisor)
Возвращает BigDecimal, значение которого является целой частью частного (this / divisor), округленного вниз.
BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
Возвращает BigDecimal, значение которого является целой частью (this / divisor).
double doubleValue()
Преобразует этот BigDecimal в double.
boolean equals(Object x)
Сравнивает этот BigDecimal с указанным Object на равенство.
float floatValue()
Преобразует этот BigDecimal в float.
int hashCode()
Возвращает хэш-код для этого BigDecimal.
int intValue()
Преобразует этот BigDecimal в int.
int intValueExact()
Преобразует этот BigDecimal в int, проверяя на потерю информации.
long longValue()
Преобразует этот BigDecimal в long.
long longValueExact()
Преобразует этот BigDecimal в long, проверяя на потерю информации.
BigDecimal max(BigDecimal val)
Возвращает максимум из этого BigDecimal и val.
BigDecimal min(BigDecimal val)
Возвращает минимум из этого BigDecimal и val.
BigDecimal movePointLeft(int n)
Возвращает BigDecimal, эквивалентный этому с десятичной точкой, сдвинутой на n позиций влево.
BigDecimal movePointRight(int n)
Возвращает BigDecimal, эквивалентный этому с десятичной точкой, сдвинутой на n позиций вправо.
BigDecimal multiply(BigDecimal multiplicand)
Возвращает BigDecimal, значение которого равно (this × multiplicand), а масштаб — (this.scale() + multiplicand.scale()).
BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
Возвращает BigDecimal, значение которого равно (this × multiplicand), с округлением в соответствии с настройками контекста.
BigDecimal negate()
Возвращает BigDecimal, значение которого равно (-this), а масштаб — this.scale().
BigDecimal negate(MathContext mc)
Возвращает BigDecimal, значение которого равно (-this), с округлением в соответствии с настройками контекста.
BigDecimal plus()
Возвращает BigDecimal, значение которого равно (+this), а масштаб — this.scale().
BigDecimal plus(MathContext mc)
Возвращает BigDecimal, значение которого равно (+this), с округлением в соответствии с настройками контекста.
BigDecimal pow(int n)
Возвращает BigDecimal, значение которого равно (thisn), степень вычисляется точно, с неограниченной точностью.
BigDecimal pow(int n, MathContext mc)
Возвращает BigDecimal, значение которого равно (thisn).
int precision()
Возвращает точность этого BigDecimal.
BigDecimal remainder(BigDecimal divisor)
Возвращает BigDecimal, значение которого равно (this % divisor).
BigDecimal remainder(BigDecimal divisor, MathContext mc)
Возвращает BigDecimal, значение которого равно (this % divisor), с округлением в соответствии с настройками контекста.
BigDecimal round(MathContext mc)
Возвращает BigDecimal, округленный в соответствии с настройками MathContext.
int scale()
Возвращает масштаб этого BigDecimal.
BigDecimal scaleByPowerOfTen(int n)
Возвращает BigDecimal, численное значение которого равно (this * 10n).
BigDecimal setScale(int newScale)
Возвращает BigDecimal, масштаб которого равен указанному значению, а значение численно равно значению этого BigDecimal.
BigDecimal setScale(int newScale, int roundingMode)
Устарело.
Вместо этого устаревшего метода следует использовать метод setScale(int, RoundingMode).
BigDecimal setScale(int newScale, RoundingMode roundingMode)
Возвращает BigDecimal, масштаб которого равен указанному значению, а непромасштабированное значение определяется путем умножения или деления непромасштабированного значения этого BigDecimal на соответствующую степень десяти для сохранения его общего значения.
short shortValueExact()
Преобразует этот BigDecimal в short, проверяя на потерю информации.
int signum()
Возвращает функцию signum этого BigDecimal.
BigDecimal sqrt(MathContext mc)
Возвращает приближение квадратного корня из this с округлением в соответствии с настройками контекста.
BigDecimal stripTrailingZeros()
Возвращает BigDecimal, численно равный этому, но с удаленными из представления любыми хвостовыми нулями.
BigDecimal subtract(BigDecimal subtrahend)
Возвращает BigDecimal, значение которого равно (this - subtrahend), а масштаб равен max(this.scale(), subtrahend.scale()).
BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
Возвращает BigDecimal, значение которого равно (this - subtrahend), с округлением в соответствии с настройками контекста.
BigInteger toBigInteger()
Преобразует этот BigDecimal в BigInteger.
BigInteger toBigIntegerExact()
Преобразует этот BigDecimal в BigInteger, проверяя потерю информации.
String toEngineeringString()
Возвращает строковое представление этого BigDecimal, используя инженерную нотацию, если нужен показатель степени.
String toPlainString()
Возвращает строковое представление этого BigDecimal, без поля показателя степени.
String toString()
Возвращает строковое представление этого BigDecimal, используя научную нотацию, если нужен показатель степени.
BigDecimal ulp()
Возвращает размер ulp (единица в последнем разряде) этого BigDecimal.
BigInteger unscaledValue()
Возвращает BigInteger, значение которого равно немасштабированному значению этого BigDecimal.
static BigDecimal valueOf(double val)
Преобразует double в BigDecimal, используя каноническое строковое представление double, предоставленное методом Double.toString(double).
static BigDecimal valueOf(long val)
Преобразует значение long в BigDecimal с масштабом ноль.
static BigDecimal valueOf(long unscaledVal, int scale)
Преобразует немасштабированное значение long и масштаб int в BigDecimal.

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

byteValue, shortValue

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

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

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

ZERO

public static final BigDecimal ZERO
Значение 0 со масштабом 0.
С тех пор:
1.5

ONE

public static final BigDecimal ONE
Значение 1 со масштабом 0.
С тех пор:
1.5

TEN

public static final BigDecimal TEN
Значение 10 со масштабом 0.
С тех пор:
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 - массив символов, являющийся источником символов.
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 - массив символов, являющийся источником символов.
offset - первый символ в массиве для проверки.
len - количество символов для рассмотрения.
mc - используемый контекст.
Исключение:
NumberFormatException - если in не является допустимым представлением BigDecimal или определенный подмассив выходит за пределы in.
С тех пор:
1.5

BigDecimal

public BigDecimal(char[] in)
Преобразует строковое представление массива символов BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String).
Примечание об реализации:
Если последовательность символов уже доступна в массиве символов, использование этого конструктора быстрее, чем преобразование массива char в строку и использование конструктора BigDecimal(String).
Параметры:
in - массив символов, являющийся источником символов.
Исключение:
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'), за которым следует одна или несколько десятичных цифр. Значение экспоненты должно лежать в диапазоне от -Integer.MAX_VALUE (Integer.MIN_VALUE+1) до Integer.MAX_VALUE включительно.

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

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

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

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

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

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

BigDecimal

public BigDecimal(String val, MathContext mc)
Преобразует строковое представление BigDecimal в BigDecimal, принимая те же строки, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.
Параметры:
val - строковое представление BigDecimal.
mc - используемый контекст.
Исключения:
NumberFormatException - если val не является допустимым представлением BigDecimal.
С тех пор:
1.5

BigDecimal

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

Примечания:

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

BigDecimal

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

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

Параметры:
val - значение с плавающей запятой double для преобразования в BigDecimal.
mc - используемый контекст.
Исключения:
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)
Преобразует целое число в BigDecimal. Масштаб BigDecimal равен нулю.
Parameters:
val - значение целого числа, которое необходимо преобразовать в BigDecimal.
Since:
1.5

BigDecimal

public BigDecimal(int val, MathContext mc)
Преобразует целое число в BigDecimal, с округлением в соответствии с настройками контекста. Масштаб BigDecimal, до любого округления, равен нулю.
Parameters:
val - значение целого числа, которое необходимо преобразовать в BigDecimal.
mc - контекст, который нужно использовать.
Since:
1.5

BigDecimal

public BigDecimal(long val)
Преобразует длинное целое число в BigDecimal. Масштаб BigDecimal равен нулю.
Parameters:
val - значение длинного целого числа, которое необходимо преобразовать в BigDecimal.
Since:
1.5

BigDecimal

public BigDecimal(long val, MathContext mc)
Преобразует длинное целое число в BigDecimal, с округлением в соответствии с настройками контекста. Масштаб BigDecimal, до любого округления, равен нулю.
Parameters:
val - значение длинного целого числа, которое необходимо преобразовать в BigDecimal.
mc - контекст, который нужно использовать.
Since:
1.5

Подробное описание методов

valueOf

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

valueOf

public static BigDecimal valueOf(long val)
Преобразует значение длинного целого числа в BigDecimal с масштабом ноль.
API Note:
Этот статический фабричный метод предоставляется вместо конструктора (long) потому что он позволяет повторно использовать часто используемые значения BigDecimal.
Parameters:
val - значение длинного целого числа.
Returns:
BigDecimal, значение которого равно val.

valueOf

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

add

public BigDecimal add(BigDecimal augend)
Возвращает BigDecimal, значение которого равно сумме текущего и переданного BigDecimal, а масштаб равен max(this.scale(), augend.scale()).
Parameters:
augend - значение, которое необходимо добавить к текущему BigDecimal.
Returns:
BigDecimal

add

public BigDecimal add(BigDecimal augend, MathContext mc)
Возвращает BigDecimal, значение которого равно сумме текущего и переданного BigDecimal, с округлением в соответствии с настройками контекста. Если одно из чисел равно нулю, а настройка точности не равна нулю, то другое число, округлённое при необходимости, используется как результат.
Parameters:
augend - значение, которое необходимо добавить к текущему BigDecimal.
mc - контекст, который нужно использовать.
Returns:
BigDecimal, округлённый при необходимости.
Since:
1.5

subtract

public BigDecimal subtract(BigDecimal subtrahend)
Возвращает BigDecimal, значение которого равно разности текущего и переданного BigDecimal, а масштаб равен max(this.scale(), subtrahend.scale()).
Parameters:
subtrahend - значение, которое необходимо вычесть из текущего BigDecimal.
Returns:
BigDecimal

subtract

public BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
Возвращает BigDecimal, значение которого равно разности текущего и переданного BigDecimal, с округлением в соответствии с настройками контекста. Если переданное число равно нулю, то текущее число, округлённое при необходимости, используется как результат. Если текущее число равно нулю, то результатом является BigDecimal со значением - переданное число, округлённое при необходимости.
Parameters:
subtrahend - значение, которое необходимо вычесть из текущего BigDecimal.
mc - контекст, который нужно использовать.
Returns:
BigDecimal, округлённый при необходимости.
Since:
1.5

multiply

public BigDecimal multiply(BigDecimal multiplicand)
Возвращает BigDecimal, значение которого равно произведению текущего и переданного BigDecimal, а масштаб равен (this.scale() + multiplicand.scale()).
Parameters:
multiplicand - значение, на которое необходимо умножить текущий BigDecimal.
Returns:
BigDecimal

multiply

public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
Возвращает BigDecimal, значение которого равно произведению текущего и переданного BigDecimal, с округлением в соответствии с настройками контекста.
Parameters:
multiplicand - значение, на которое необходимо умножить текущий BigDecimal.
mc - контекст, который нужно использовать.
Returns:
BigDecimal, округлённый при необходимости.
Since:
1.5

divide

@Deprecated(since="9") public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
Deprecated.
Метод divide(BigDecimal, int, RoundingMode) следует использовать вместо этого устаревшего метода.
Возвращает BigDecimal, значение которого равно частному от деления текущего BigDecimal на переданный, с указанным масштабом. Если необходимо округлить результат, используется указанный режим округления.
Parameters:
divisor - значение, на которое необходимо разделить текущий BigDecimal.
scale - масштаб возвращаемого частного.
roundingMode - режим округления.
Returns:
BigDecimal
Throws:
ArithmeticException - если divisor равно нулю, roundingMode==ROUND_UNNECESSARY и указанный масштаб недостаточен для точного представления результата деления.
IllegalArgumentException - если roundingMode не представляет допустимый режим округления.
See Also:
  • ROUND_UP
  • ROUND_DOWN
  • ROUND_CEILING
  • ROUND_FLOOR
  • ROUND_HALF_UP
  • ROUND_HALF_DOWN
  • ROUND_HALF_EVEN
  • ROUND_UNNECESSARY

divide

public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
Возвращает BigDecimal, значение которого равно частному от деления текущего BigDecimal на переданный, с указанным масштабом. Если необходимо округлить результат, используется указанный режим округления.
Parameters:
divisor - значение, на которое необходимо разделить текущий BigDecimal.
scale - масштаб возвращаемого частного.
roundingMode - режим округления.
Returns:
BigDecimal
Throws:
ArithmeticException - если divisor равно нулю, roundingMode==RoundingMode.UNNECESSARY и указанный масштаб недостаточен для точного представления результата деления.
Since:
1.5

деление

@Deprecated(since="9") public BigDecimal divide(BigDecimal divisor, int roundingMode)
Устарело.
Метод divide(BigDecimal, RoundingMode) следует использовать вместо этого устаревшего метода.
Возвращает значение BigDecimal, значение которого равно (this / divisor), а масштаб — this.scale(). Если для генерации результата с заданным масштабом необходимо выполнить округление, применяется указанный режим округления.
Параметры:
divisor - значение, на которое делится этот BigDecimal.
roundingMode - режим округления для применения.
Возвращает:
this / divisor
Исключения:
ArithmeticException - если divisor==0, или roundingMode==ROUND_UNNECESSARY и this.scale() недостаточно для точного представления результата деления.
IllegalArgumentException - если roundingMode не представляет собой допустимый режим округления.
См. также:
  • ROUND_UP
  • ROUND_DOWN
  • ROUND_CEILING
  • ROUND_FLOOR
  • ROUND_HALF_UP
  • ROUND_HALF_DOWN
  • ROUND_HALF_EVEN
  • ROUND_UNNECESSARY

деление

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

деление

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

деление

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

остаток

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

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

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

остаток

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

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

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

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor)
Возвращает массив из двух элементов BigDecimal, содержащий результат divideToIntegralValue и результат remainder для двух операндов.

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

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

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
Возвращает двухэлементный массив BigDecimal, содержащий результат divideToIntegralValue и результат remainder для двух операндов с округлением в соответствии с параметрами контекста.

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

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

sqrt

public BigDecimal sqrt(MathContext mc)
Возвращает приближение квадратного корня из this с округлением в соответствии с настройками контекста.

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

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

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

pow

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

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

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

pow

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

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

  • Исключение ArithmeticException генерируется, если:
    • abs(n) > 999999999
    • mc.precision == 0 и n < 0
    • mc.precision > 0 и n имеет более mc.precision десятичных знаков
  • если n равно нулю, возвращается ONE даже если this равно нулю, в противном случае:
    • если n положительно, результат вычисляется с помощью метода возведения в степень через удвоение (repeated squaring) в один накопитель. Индивидуальные умножения с накопителем используют те же настройки контекста математики, что и в 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
См. также:
  • negate()

plus

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

Действие этого метода идентично действию метода round(MathContext).

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

signum

public int signum()
Возвращает функцию знака этого BigDecimal.
Возвращает:
-1, 0 или 1, в зависимости от того, является ли значение этого BigDecimal отрицательным, нулевым или положительным.

scale

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

precision

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

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

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

unscaledValue

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

round

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

Действие этого метода идентично действию метода plus(MathContext).

Параметры:
mc - используемый контекст.
Возвращает:
BigDecimal округлённый в соответствии с настройками MathContext.
С:
1.5
См. также:
  • plus(MathContext)

setScale

public BigDecimal setScale(int newScale, RoundingMode roundingMode)
Возвращает BigDecimal, масштаб которого равен указанному значению, а неотмасштабированное значение определяется умножением или делением неотмасштабированного значения этого BigDecimal на соответствующую степень десяти для сохранения его общего значения. Если масштаб уменьшается в ходе операции, неотмасштабированное значение должно быть разделено (а не умножено), и значение может измениться; в этом случае к операции деления применяется указанный режим округления.
API Note:
Поскольку объекты BigDecimal являются неизменяемыми, вызовы этого метода не приводят к изменению исходного объекта, что противоречит общепринятой практике именования методов setX для изменения поля X. Вместо этого, setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым.
Parameters:
newScale - масштаб BigDecimal возвращаемого значения.
roundingMode - Режим округления, который необходимо применить.
Returns:
a BigDecimal whose scale is the specified value, and whose unscaled value is determined by multiplying or dividing this BigDecimal's unscaled value by the appropriate power of ten to maintain its overall value.
Throws:
ArithmeticException - если roundingMode==UNNECESSARY и указанная операция масштабирования потребуют округления.
Since:
1.5
See Also:
  • RoundingMode

setScale

@Deprecated(since="9") public BigDecimal setScale(int newScale, int roundingMode)
Deprecated.
Метод setScale(int, RoundingMode) следует использовать вместо этого устаревшего метода.
Возвращает BigDecimal, масштаб которого равен указанному значению, а неотмасштабированное значение определяется умножением или делением неотмасштабированного значения этого BigDecimal на соответствующую степень десяти для сохранения его общего значения. Если масштаб уменьшается в ходе операции, неотмасштабированное значение должно быть разделено (а не умножено), и значение может измениться; в этом случае к операции деления применяется указанный режим округления.
API Note:
Поскольку объекты BigDecimal являются неизменяемыми, вызовы этого метода не приводят к изменению исходного объекта, что противоречит общепринятой практике именования методов setX для изменения поля X. Вместо этого, setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым.
Parameters:
newScale - масштаб BigDecimal возвращаемого значения.
roundingMode - Режим округления, который необходимо применить.
Returns:
a BigDecimal whose scale is the specified value, and whose unscaled value is determined by multiplying or dividing this BigDecimal's unscaled value by the appropriate power of ten to maintain its overall value.
Throws:
ArithmeticException - если roundingMode==ROUND_UNNECESSARY и указанная операция масштабирования потребуют округления.
IllegalArgumentException - если roundingMode не представляет собой допустимый режим округления.
See Also:
  • ROUND_UP
  • ROUND_DOWN
  • ROUND_CEILING
  • ROUND_FLOOR
  • ROUND_HALF_UP
  • ROUND_HALF_DOWN
  • ROUND_HALF_EVEN
  • ROUND_UNNECESSARY

setScale

public BigDecimal setScale(int newScale)
Возвращает BigDecimal, масштаб которого равен указанному значению, и значение которого численно равно этому BigDecimal. Бросает ArithmeticException, если это невозможно.

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

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

API Note:
Поскольку объекты BigDecimal являются неизменяемыми, вызовы этого метода не приводят к изменению исходного объекта, что противоречит общепринятой практике именования методов setX для изменения поля X. Вместо этого, setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым.
Parameters:
newScale - масштаб BigDecimal возвращаемого значения.
Returns:
a BigDecimal whose scale is the specified value, and whose unscaled value is determined by multiplying or dividing this BigDecimal's unscaled value by the appropriate power of ten to maintain its overall value.
Throws:
ArithmeticException - если указанная операция масштабирования потребует округления.
See Also:
  • setScale(int, int)
  • setScale(int, RoundingMode)

movePointLeft

public BigDecimal movePointLeft(int n)
Возвращает BigDecimal, который эквивалентен этому, с десятичной точкой, смещенной на n позиций влево. Если n неотрицательно, вызов просто добавляет n к масштабу. Если n отрицательно, вызов эквивалентен movePointRight(-n). Возвращаемый BigDecimal имеет значение (this × 10-n) и масштаб max(this.scale()+n, 0).
Parameters:
n - число позиций для смещения десятичной точки влево.
Returns:
a BigDecimal which is equivalent to this one with the decimal point moved n places to the left.
Throws:
ArithmeticException - если масштаб переполнен.

movePointRight

public BigDecimal movePointRight(int n)
Возвращает BigDecimal, который эквивалентен этому, с десятичной точкой, смещенной на n позиций вправо. Если n неотрицательно, вызов просто вычитает n из масштаба. Если n отрицательно, вызов эквивалентен movePointLeft(-n). Возвращаемый BigDecimal имеет значение (this × 10n) и масштаб max(this.scale()-n, 0).
Parameters:
n - число позиций для смещения десятичной точки вправо.
Returns:
a BigDecimal which is equivalent to this one with the decimal point moved n places to the right.
Throws:
ArithmeticException - если масштаб переполнен.

scaleByPowerOfTen

public BigDecimal scaleByPowerOfTen(int n)
Возвращает BigDecimal, численное значение которого равно (this * 10n). Масштаб результата — (this.scale() - n).
Parameters:
n - показатель степени десяти для масштабирования
Returns:
a BigDecimal whose numerical value is equal to (this * 10n)
Throws:
ArithmeticException - если масштаб будет находиться вне диапазона 32-битного целого числа.
Since:
1.5

stripTrailingZeros

public BigDecimal stripTrailingZeros()
Возвращает BigDecimal, численно равный этому, но с удаленными из представления всеми хвостовыми нулями. Например, удаление хвостовых нулей из значения BigDecimal 600.0, которое имеет компоненты [BigInteger, scale] равные [6000, 1], даёт 6E2 с компонентами [BigInteger, scale] равными [6, -2]. Если этот BigDecimal численно равен нулю, то возвращается BigDecimal.ZERO.
Returns:
a numerically equal BigDecimal with any trailing zeros removed.
Throws:
ArithmeticException - если масштаб переполнен.
Since:
1.5

compareTo

public int compareTo(BigDecimal val)
Сравнивает этот BigDecimal численно со специфицированным BigDecimal. Два объекта BigDecimal с одинаковым значением, но разным масштабом (например, 2.0 и 2.00), считаются равными в соответствии с этим методом. Такие значения находятся в одном когорте. Этот метод предлагается вместо отдельных методов для каждого из шести булевых операторов сравнения (<, ==, >, >=, !=, <=). Предлагаемый шаблон для выполнения этих сравнений: (x.compareTo(y) <op> 0), где <op> — один из шести операторов сравнения.
Specified by:
compareTo в интерфейсе Comparable<BigDecimal>
API Note:
Примечание: этот класс имеет естественный порядок, несовместимый с equals.
Parameters:
val - BigDecimal для сравнения с этим BigDecimal.
Returns:
-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].
Overrides:
equals в классе Object
API Note:
Один пример, показывающий, как 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.
Parameters:
x - Object, с которым необходимо сравнить этот BigDecimal.
Returns:
true тогда и только тогда, когда указанный Object является BigDecimal с значением и масштабом, равными значению и масштабу этого BigDecimal.
See Also:
  • compareTo(java.math.BigDecimal)
  • hashCode()

min

public BigDecimal min(BigDecimal val)
Возвращает минимум этого BigDecimal и val.
Parameters:
val - значение, с которым необходимо вычислить минимум.
Returns:
BigDecimal с значением, меньшим из значений этого BigDecimal и val. Если они равны, как определено методом compareTo, возвращается this.
See Also:
  • compareTo(java.math.BigDecimal)

max

public BigDecimal max(BigDecimal val)
Возвращает максимум этого BigDecimal и val.
Parameters:
val - значение, с которым необходимо вычислить максимум.
Returns:
BigDecimal со значением, большим из значений этого BigDecimal и val. Если они равны, как определено методом compareTo, возвращается this.
See Also:
  • compareTo(java.math.BigDecimal)

hashCode

public int hashCode()
Возвращает код хэширования для этого BigDecimal. Код хэширования вычисляется как функция от неизменённого значения и масштаба этого BigDecimal.
Overrides:
hashCode в классе Object
API Note:
Два BigDecimal объекта, которые численно равны, но различаются по масштабу (например, 2.0 и 2.00), обычно не имеют одинаковый код хэширования.
Returns:
код хэширования для этого BigDecimal.
See Also:
  • equals(Object)

toString

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

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

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

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

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

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

Примеры:

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

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

toEngineeringString

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

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

Returns:
строковое представление этого BigDecimal, используя инженерную нотацию, если необходим экспоненциальный вид.
Since:
1.5

toPlainString

public String toPlainString()
Возвращает строковое представление этого BigDecimal без поля экспоненты. Для значений с положительной разрядностью используется количество цифр справа от десятичной точки для указания разрядности. Для значений с нулевой или отрицательной разрядностью результирующая строка генерируется так, как если бы значение было преобразовано в численно равное значение с нулевой разрядностью и как если бы все заключительные нули значения с нулевой разрядностью были присутствующими в результате. Вся строка предваряется символом минус '-' ('\u002D') если значение без масштабирования меньше нуля. Символ знака не предваряется, если значение без масштабирования равно нулю или положительно. Обратите внимание, что если результат этого метода передается в конструктор строки строковый конструктор, то будет восстановлено только числовое значение этого BigDecimal; представление нового BigDecimal может иметь другую разрядность. В частности, если у этого BigDecimal отрицательная разрядность, то строка, полученная в результате этого метода, будет иметь разрядность ноль при обработке строковым конструктором. (Этот метод ведет себя аналогично методу toString в версиях 1.4 и более ранних).
Возвращает:
строковое представление этого BigDecimal без поля экспоненты.
С:
1.5
См. также:
  • toString()
  • toEngineeringString()

toBigInteger

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

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

Возвращает:
это BigDecimal преобразованное в BigInteger.
См. *Спецификацию языка 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()
Возвращает размер единицы в последнем разряде (ulp) для этого BigDecimal. ULP ненулевого BigDecimal значения — это положительное расстояние между этим значением и BigDecimal значением, следующим по величине, имеющим такое же количество знаков. ULP нулевого значения численно равно 1 с масштабом this. Результат хранится с таким же масштабом, что и this, поэтому результат для нулевых и ненулевых значений равен [1, this.scale()].
Возвращает:
размер ulp для this
С:
1.5

© 1993, 2021, 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/17/docs/api/java.base/java/math/BigDecimal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API