Класс 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, правила арифметики с плавающей точкой в целом совместимы с выбранными режимами арифметики, определёнными в ANSI X3.274-1996 и ANSI X3.274-1996/AM 1-2000 (раздел 7.4). В отличие от этих стандартов, BigDecimal включает множество режимов округления. Любые конфликты между этими стандартами ANSI и спецификацией BigDecimal разрешаются в пользу BigDecimal.
Поскольку одно и то же числовое значение может иметь разные представления (с разными масштабами), правила арифметики и округления должны указывать как числовой результат, так и масштаб, используемый в представлении результата. Разные представления одного и того же числового значения называются членами одного и того же когорты. Естественный порядок BigDecimal рассматривает члены одной и той же когорты как равные друг другу. В отличие от этого, метод equals требует, чтобы и числовое значение, и представление были одинаковыми для равенства. Результаты методов, таких как scale и unscaledValue(), будут отличаться для численно равных значений с разными представлениями.
В общем, режимы округления и настройка точности определяют, как операции возвращают результаты с ограниченным числом цифр, когда точный результат имеет больше цифр (возможно, бесконечно много в случае деления и извлечения квадратного корня), чем число возвращаемых цифр. Во-первых, общее количество цифр для возврата задаётся настройкой точности объекта MathContext; это определяет точность результата. Счёт цифр начинается с самой левой ненулевой цифры точного результата. Режим округления определяет, как любые отброшенные последующие цифры влияют на возвращаемый результат.
Для всех арифметических операторов операция выполняется так, как будто сначала вычисляется точный промежуточный результат, а затем он округляется до заданного числа цифр (при необходимости) с использованием выбранного режима округления. Если точный результат не возвращается, некоторые позиции цифр точного результата отбрасываются. При округлении, увеличивающем величину возвращаемого результата, возможно создание новой позиции цифры за счёт переноса в ведущую цифру "9". Например, округляя значение 999,9 до трёх знаков с округлением вверх, численно равно одной тысяче, представленной как 100×101. В таких случаях новая "1" — это ведущая позиция цифры возвращаемого результата.
Для методов и конструкторов с параметром MathContext если результат неточен, но режим округления UNNECESSARY, будет брошено исключение
ArithmeticException.
Помимо логического точного результата, каждая арифметическая операция имеет предпочтительный масштаб для представления результата. Предпочтительный масштаб для каждой операции указан в таблице ниже.
| Операция | Предпочтительный масштаб результата |
|---|---|
| Сложение | max(масштаб_слагаемого, масштаб_слагаемого) |
| Вычитание | max(масштаб_уменьшаемого, масштаб_вычитаемого) |
| Умножение | масштаб_множителя + масштаб_множимого |
| Деление | масштаб_делимого - масштаб_делителя |
| Квадратный корень | масштаб_подкоренного/2 |
1/32 является 0.03125. Перед округлением масштаб логического точного промежуточного результата является предпочтительным масштабом для данной операции. Если точный числовой результат не может быть представлен в precision цифрах, округление выбирает набор цифр для возврата, и масштаб результата уменьшается от масштаба промежуточного результата до наименьшего масштаба, который может представить precision цифр, фактически возвращённых. Если точный результат может быть представлен не более чем в precision цифрах, возвращается представление результата с масштабом, наиболее близким к предпочтительному масштабу. В частности, точно представимый частный может быть представлен менее чем precision цифрами путём удаления последующих нулей и уменьшения масштаба. Например, округление до трёх цифр с использованием режима округления округления вниз,
19/100 = 0.19 // integer=19, scale=2
но
21/110 = 0.190 // integer=190, scale=3
Обратите внимание, что для сложения, вычитания и умножения уменьшение масштаба будет равно количеству позиций цифр точного результата, которые отбрасываются. Если округление вызывает перенос, создающий новую позицию старшей цифры, то отбрасывается дополнительная цифра результата, чем в случае, когда новая позиция цифры не создаётся.
Другие методы могут иметь немного отличающиеся правила округления. Например, результат метода pow при использовании указанного алгоритма иногда может отличаться от округленного математического результата более чем на одну единицу в последнем разряде, одну ulp.
Предоставляются два типа операций для изменения масштаба объекта BigDecimal: операции масштабирования/округления и операции перемещения десятичной точки. Операции масштабирования/округления (setScale и round) возвращают объект BigDecimal, значение которого приблизительно (или точно) равно значению операнда, но масштаб или точность которого является заданным значением; то есть, они увеличивают или уменьшают точность хранимого числа с минимальным влиянием на его значение. Операции перемещения десятичной точки (movePointLeft и movePointRight) возвращают объект BigDecimal, созданный из операнда путём перемещения десятичной точки на заданное расстояние в заданном направлении.
В качестве 32-битного целого числа набор значений масштаба большой, но ограничен. Если масштаб результата превысит диапазон 32-битного целого числа, либо при переполнении, либо при недополнении, операция может выбросить исключение ArithmeticException.
Для краткости и ясности в описаниях методов BigDecimal используется псевдокод. Выражение псевдокода (i + j) означает "объект BigDecimal, значение которого равно значению объекта BigDecimal i плюс значение объекта BigDecimal j". Выражение псевдокода (i == j) означает "true тогда и только тогда, когда объект BigDecimal i представляет то же значение, что и объект BigDecimal j". Другие выражения псевдокода интерпретируются аналогично. Квадратные скобки обозначают конкретную пару BigInteger и масштаба, определяющие значение объекта BigDecimal; например, [19, 2] — это объект BigDecimal численно равный 0,19 со масштабом 2.
Все методы и конструкторы этого класса выбрасывают исключение NullPointerException при передаче ссылки на объект null в качестве параметра.
- Примечание API:
- Следует проявлять осторожность при использовании объектов
BigDecimalв качестве ключей вSortedMapили элементов вSortedSet, поскольку естественный порядокBigDecimalнесовместим с equals. См.Comparable,SortedMapилиSortedSetдля получения дополнительной информации.Отношение к десятичной арифметике IEEE 754
Начиная с его пересмотра 2008 года, Стандарт IEEE 754 для арифметики с плавающей точкой охватывает десятичные форматы и операции. Хотя существуют широкие сходства в десятичной арифметике, определенной IEEE 754 и этим классом, существуют и заметные различия. Основное сходство, которым обладаютBigDecimalи десятичная арифметика IEEE 754, — это концептуальная операция вычисления математического значения бесконечно точного вещественного числа операции и затем отображение этого вещественного числа на представимое десятичное значение с плавающей точкой в соответствии с политикой округления. Политика округления называется режимом округления дляBigDecimalи называется атрибутом направления округления в IEEE 754-2019. Когда точное значение не представимо, политика округления определяет, какое из двух представимых десятичных значений, ограничивающих точное значение, выбирается в качестве вычисленного результата. Понятие предпочтительной разрядности/предпочтительного показателя степени также разделяется обеими системами.Что касается различий, IEEE 754 включает несколько типов значений, не моделируемых
BigDecimal, включая отрицательный ноль, знаковые бесконечности и NaN (не число). IEEE 754 определяет форматы, которые параметризуются основанием (двоичным или десятичным), количеством значащих цифр и диапазоном показателя степени. Формат определяет набор представимых значений. Большинство операций принимают в качестве входных данных одно или несколько значений заданного формата и производят результат в том же формате. РазрядностьBigDecimalэквивалентна отрицанию показателя степени значения IEEE 754. ЗначенияBigDecimalне имеют формата в том же смысле; все значения имеют тот же возможный диапазон разрядности/показателя степени, а немасштабированное значение имеет произвольную точность. Вместо этого для операцийBigDecimal, принимающих параметрMathContext, если уMathContextесть ненулевая точность, набор возможных представимых значений для результата определяется точностью аргументаMathContext. Например, вBigDecimal, если ненулевое трехзначное число и ненулевое четырехзначное число умножаются вместе в контексте объектаMathContextс точностью три, результат будет иметь три значащих цифры (при условии отсутствия переполнения или недополнения и т. д.).Политики округления, реализованные операциями
BigDecimal, указанные режимами округления, являются надмножеством атрибутов направления округления IEEE 754.Арифметика
BigDecimalбудет больше всего напоминать десятичную арифметику IEEE 754, еслиMathContext, соответствующее десятичному формату IEEE 754, например decimal64 или decimal128, используется для округления всех начальных значений и промежуточных операций. Вычисленные числовые значения могут отличаться, если диапазон показателя степени формата IEEE 754, который аппроксимируется, превышен, так какMathContextне ограничивает разрядность результатовBigDecimal. Операции, которые могли бы сгенерировать NaN или точную бесконечность, такие как деление на ноль, выбрасываютArithmeticExceptionв арифметике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, округляя в соответствии с настройками контекста. |
Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
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 и 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. |
int |
precision() |
Возвращает значение точность этого BigDecimal. |
BigDecimal |
remainder |
Возвращает BigDecimal, значение которого равно (this % divisor). |
BigDecimal |
remainder |
Возвращает BigDecimal, значение которого равно (this %
divisor), с округлением в соответствии с настройками контекста. |
BigDecimal |
round |
Возвращает BigDecimal, округленный в соответствии с настройками MathContext. |
int |
scale() |
Возвращает масштаб этого BigDecimal. |
BigDecimal |
scaleByPowerOfTen |
Возвращает BigDecimal, численное значение которого равно ( this * 10n). |
BigDecimal |
setScale |
Возвращает BigDecimal, масштаб которого равен указанному значению, а значение численно равно этому значению BigDecimal. |
BigDecimal |
setScale |
Устарело. Вместо этого следует использовать метод setScale(int, RoundingMode). |
BigDecimal |
setScale |
Возвращает BigDecimal, масштаб которого равен указанному значению, а значение без знака получено умножением или делением значащего без знака этого BigDecimal на соответствующую степень десяти для сохранения общего значения. |
short |
shortValueExact() |
Преобразует этот BigDecimal в short, проверяя потерю информации. |
int |
signum() |
Возвращает функцию знака для этого 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. |
Методы, объявленные в классе java.lang.Number
byteValue, shortValue
Подробное описание полей
ZERO
public static final BigDecimal ZERO
- Since:
- 1.5
ONE
public static final BigDecimal ONE
- Since:
- 1.5
TWO
public static final BigDecimal TWO
- Since:
- 19
TEN
public static final BigDecimal TEN
- Since:
- 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. - Since:
- 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. - Since:
- 1.5
BigDecimal
public BigDecimal(char[] in)
BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String).- Примечание об реализации:
- Если последовательность символов уже доступна в виде массива символов, использование этого конструктора быстрее, чем преобразование массива
charв строку и использование конструктораBigDecimal(String). - Параметры:
-
in- массивcharсимволов, являющийся источником символов. - Исключения:
-
NumberFormatException- еслиinне является допустимым представлениемBigDecimal. - Since:
- 1.5
BigDecimal
public BigDecimal(char[] in, MathContext mc)
BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.- Замечание по реализации:
- Если последовательность символов уже доступна в виде символьного массива, использование этого конструктора быстрее, чем преобразование массива
charв строку и использование конструктораBigDecimal(String). - Параметры:
-
in- массив символов, являющийся источником символов. -
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 и ±Бесконечность, этот конструктор совместим со значениями, возвращаемыми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, как и ожидалось. Поэтому рекомендуется использовать конструктор конструктор со строкой вместо этого. - Когда
doubleдолжен использоваться в качестве источника для BigDecimal, обратите внимание, что этот конструктор обеспечивает точное преобразование; он не даёт такой же результат, как преобразованиеdoubleв строку с помощью методаDouble.toString(double)и последующее использование конструктораBigDecimal(String). Для получения такого результата используйте методvalueOf(double).
- Параметры:
-
val- значение с плавающей запятой, подлежащее преобразованию в BigDecimal. - Исключения:
-
NumberFormatException- еслиvalбесконечна или равна NaN.
BigDecimal
public BigDecimal(double val, MathContext mc)
double в BigDecimal, с округлением в соответствии с настройками контекста. Масштаб BigDecimal - наименьшее значение, при котором (10scale × val) является целым числом. Результаты этого конструктора могут быть несколько непредсказуемыми, и его использование, как правило, не рекомендуется; см. примечания к конструктору BigDecimal(double).
- Параметры:
-
val- значение с плавающей запятой, подлежащее преобразованию в 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)
- Параметры:
-
val- целое число, которое нужно преобразовать в BigDecimal. - С:
- 1.5
BigDecimal
public BigDecimal(int val, MathContext mc)
- Параметры:
-
val- целое число, которое нужно преобразовать в BigDecimal. -
mc- контекст для округления. - С:
- 1.5
BigDecimal
public BigDecimal(long val)
- Параметры:
-
val- длинное целое число, которое нужно преобразовать в BigDecimal. - С:
- 1.5
BigDecimal
public BigDecimal(long val, MathContext mc)
- Параметры:
-
val- длинное целое число, которое нужно преобразовать в BigDecimal. -
mc- контекст для округления. - С:
- 1.5
Методы
valueOf
public static BigDecimal valueOf(long unscaledVal, int scale)
- Примечание API:
- Этот статический фабричный метод предпочтительнее конструктора (
long,int) потому что он позволяет повторно использовать часто используемые значения BigDecimal. - Параметры:
-
unscaledVal- неразмеренное значение BigDecimal. -
scale- масштаб BigDecimal. - Возвращает:
- BigDecimal со значением
(unscaledVal × 10-scale).
valueOf
public static BigDecimal valueOf(long val)
- Примечание API:
- Этот статический фабричный метод предпочтительнее конструктора (
long) потому что он позволяет повторно использовать часто используемые значения BigDecimal. - Параметры:
-
val- значение длинного целого числа. - Возвращает:
- BigDecimal со значением
val.
valueOf
public static BigDecimal valueOf(double val)
Double.toString(double).- Примечание API:
- Это обычно предпочтительный способ преобразования double (или float) в BigDecimal, так как возвращаемое значение равно результату построения BigDecimal из результата использования
Double.toString(double). - Параметры:
-
val- double, которое нужно преобразовать в BigDecimal. - Возвращает:
- BigDecimal, значение которого равно или приблизительно равно значению
val. - Исключения:
-
NumberFormatException- еслиvalбесконечно или NaN. - С:
- 1.5
add
public BigDecimal add(BigDecimal augend)
- Параметры:
-
augend- значение, которое нужно добавить к текущему BigDecimal. - Возвращает:
- BigDecimal
add
public BigDecimal add(BigDecimal augend, MathContext mc)
- Параметры:
-
augend- значение, которое нужно добавить к текущему BigDecimal. -
mc- контекст для округления. - Возвращает:
- BigDecimal, округленный при необходимости.
- С:
- 1.5
subtract
public BigDecimal subtract(BigDecimal subtrahend)
- Параметры:
-
subtrahend- значение, которое нужно вычесть из текущего BigDecimal. - Возвращает:
- BigDecimal
subtract
public BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
- Параметры:
-
subtrahend- значение, которое нужно вычесть из текущего BigDecimal. -
mc- контекст для округления. - Возвращает:
- BigDecimal, округленный при необходимости.
- С:
- 1.5
multiply
public BigDecimal multiply(BigDecimal multiplicand)
- Параметры:
-
multiplicand- значение, на которое нужно умножить текущий BigDecimal. - Возвращает:
- BigDecimal
multiply
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
- Параметры:
-
multiplicand- значение, на которое нужно умножить текущий BigDecimal. -
mc- контекст для округления. - Возвращает:
- BigDecimal, округленный при необходимости.
- С:
- 1.5
divide
@Deprecated(since="9") public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
divide(BigDecimal, int, RoundingMode).- Параметры:
-
divisor- значение, на которое нужно разделить текущий BigDecimal. -
scale- масштаб результата деления. -
roundingMode- режим округления. - Возвращает:
- BigDecimal
- Исключения:
-
ArithmeticException- еслиdivisor,roundingMode==ROUND_UNNECESSARYи указанный масштаб недостаточен для точного представления результата деления. -
IllegalArgumentException- еслиroundingModeне соответствует допустимому режиму округления. - См. также:
divide
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
- Параметры:
-
divisor- значение, на которое нужно разделить текущий BigDecimal. -
scale- масштаб результата деления. -
roundingMode- режим округления. - Возвращает:
- BigDecimal
- Исключения:
-
ArithmeticException- еслиdivisor,roundingMode==RoundingMode.UNNECESSARYи указанный масштаб недостаточен для точного представления результата деления. - С:
- 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не представляет допустимый режим округления. - См. также:
деление
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)). Обратите внимание, что это не операция модуля (результат может быть отрицательным).
- Параметры:
-
divisor- значение, на которое следует разделить этоBigDecimal. - Возвращает:
-
this % divisor. - Исключения:
-
ArithmeticException- еслиdivisor==0 - С:
- 1.5
остаток
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)
divideToIntegralValue за которым следует результат remainder для двух операндов. Обратите внимание, что если требуется как целая часть частного, так и остаток, этот метод быстрее, чем использование методов divideToIntegralValue и remainder по отдельности, потому что деление нужно выполнять только один раз.
- Параметры:
-
divisor- значение, на которое следует разделить этоBigDecimal, и вычислить остаток. - Возвращает:
- массив из двух элементов: частное (результат
divideToIntegralValue) - начальный элемент, а остаток - конечный. - Исключения:
-
ArithmeticException- еслиdivisor==0 - С:
- 1.5
- См. также:
divideAndRemainder
public BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
divideToIntegralValue за которым следует результат remainder для двух операндов, вычисленный с округлением в соответствии с параметрами контекста. Обратите внимание, что если требуется как целая часть частного, так и остаток, этот метод быстрее, чем использование методов divideToIntegralValue и remainder по отдельности, потому что деление нужно выполнять только один раз.
- Параметры:
-
divisor- значение, на которое следует разделить этоBigDecimal, и вычислить остаток. -
mc- контекст для использования. - Возвращает:
- массив из двух элементов: частное (результат
divideToIntegralValue) - начальный элемент, а остаток - конечный. - Исключения:
-
ArithmeticException- еслиdivisor==0 -
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY, илиmc.precision> 0 и результатthis.divideToIntegralValue(divisor)потребовал бы точности болееmc.precisionцифр. - С:
- 1.5
- См. также:
sqrt
public BigDecimal sqrt(MathContext mc)
this с округлением в соответствии с настройками контекста. Предпочтительная разрядность возвращаемого результата равна this.scale()/2. Значение возвращаемого результата всегда находится в пределах одной единицы в последнем значащем разряде (ulp) от точного десятичного значения для заданной точности. Если режим округления равен HALF_UP, HALF_DOWN или HALF_EVEN, результат находится в пределах одной половины 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
- См. также:
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положительно, результат вычисляется с помощью техники возведения в степень с помощью повторяющегося возведения в квадрат в единственный накопитель. Отдельные умножения с накопителем используют те же настройки контекста математики, что и в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- Режим округления для применения. - Возвращает:
- a
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- Режим округления для применения. - Возвращает:
- a
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, которое должно быть возвращено. - Возвращает:
- a
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- число позиций для сдвига десятичной точки влево. - Возвращает:
- a
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- число позиций для сдвига десятичной точки вправо. - Возвращает:
- a
BigDecimal, эквивалентный этому, с десятичной точкой, сдвинутой вправо наnпозиций. - Исключение:
-
ArithmeticException- если масштаб переполняется.
scaleByPowerOfTen
public BigDecimal scaleByPowerOfTen(int n)
this * 10n). Масштаб результата равен (this.scale() - n).- Параметры:
-
n- показатель степени десяти для масштабирования - Возвращает:
- a 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].- 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. Поведение этого метода аналогично проверке эквивалентности представленияdoubleзначений. - Parameters:
-
x-Object, с которым должен быть сравнен этотBigDecimal. - Returns:
-
trueтогда и только тогда, когда указанныйObjectявляетсяBigDecimal, значение и масштаб которого равны этомуBigDecimal. - See Also:
min
public BigDecimal min(BigDecimal val)
BigDecimal и val.- Parameters:
-
val- значение, с которым вычисляется минимум. - Returns:
BigDecimal, значение которого является меньшим из этогоBigDecimalиval. Если они равны, как определено методомcompareTo, возвращаетсяthis.- See Also:
max
public BigDecimal max(BigDecimal val)
BigDecimal и val.- Parameters:
-
val- значение, с которым вычисляется максимум. - Returns:
BigDecimal, значение которого является большим из этогоBigDecimalиval. Если они равны, как определено методомcompareTo, возвращаетсяthis.- See Also:
hashCode
public int hashCode()
BigDecimal. Код хэширования вычисляется как функция от неизменённого значения и масштаба этого BigDecimal.- Overrides:
-
hashCodeв классеObject - API Note:
- Два
BigDecimalобъекта, которые численно равны, но отличаются по масштабу (например, 2.0 и 2.00), обычно не будут иметь одинаковый код хэширования. - Returns:
- код хэширования для этого
BigDecimal. - See Also:
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.
- Overrides:
-
toStringв классеObject - Returns:
- строковое представление этого
BigDecimal. - See Also:
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
- См. также:
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 значения — это положительное расстояние между этим значением и ближайшим значением большей величины с тем же количеством цифр. ULP нулевого значения численно равно 1 с масштабом this. Результат хранится с тем же масштабом, что и this, поэтому результат для нулевых и ненулевых значений равен [1,
this.scale()]. - Возвращает:
- размер ulp для
this - С:
- 1.5
© 1993, 2023, 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/21/docs/api/java.base/java/math/BigDecimal.html
RoundingMode.CEILINGвместо этого.