Класс BigDecimal
- java.lang.Object
-
- java.lang.Number
-
- java.math.BigDecimal
- Все реализованные интерфейсы:
-
Serializable,Comparable<BigDecimal>
public class BigDecimal extends Number implements Comparable<BigDecimal>
Неизменяемые десятичные числа произвольной точности со знаком. Объект BigDecimal состоит из целого числа произвольной точности немасштабированного значения и 32-битного целого числа масштаба. Если масштаб равен нулю или положителен, он представляет количество цифр справа от десятичной точки. Если масштаб отрицателен, немасштабированное значение числа умножается на десять в степени, равной модулю масштаба. Значение числа, представленного объектом BigDecimal, поэтому равно (unscaledValue × 10-scale).
Класс BigDecimal предоставляет операции для арифметических вычислений, изменения масштаба, округления, сравнения, хеширования и преобразования формата. Метод toString() обеспечивает каноническое представление объекта BigDecimal.
Класс BigDecimal предоставляет пользователю полный контроль над поведением округления. Если режим округления не задан, а точный результат не может быть представлен, выбрасывается исключение; в противном случае вычисления могут выполняться с заданной точностью и режимом округления, передавая соответствующий объект MathContext в операцию. В любом случае предоставляется восемь режимов округления. Использование целочисленных полей в этом классе (например, ROUND_HALF_UP) для представления режима округления устарело; следует использовать перечисления класса RoundingMode enum (например, RoundingMode.HALF_UP).
При использовании объекта MathContext с настройкой точности 0 (например, MathContext.UNLIMITED), арифметические операции являются точными, как и арифметические методы, которые не принимают объект MathContext. (Это единственное поведение, которое поддерживалось в версиях до 5.) Как следствие вычисления точного результата, настройка режима округления объекта MathContext с настройкой точности 0 не используется и, следовательно, не имеет значения. В случае деления точный результат может иметь бесконечно длинную десятичную запись; например, 1 деленное на 3. Если результат деления имеет бесконечную десятичную запись, а операция должна вернуть точный результат, выбрасывается исключение ArithmeticException. В противном случае возвращается точный результат деления, как и в случае других операций.
Когда настройка точности не равна 0, правила арифметики с плавающей точкой в целом совместимы с выбранными режимами работы арифметики, определенными в ANSI X3.274-1996 и ANSI X3.274-1996/AM 1-2000 (раздел 7.4). В отличие от этих стандартов, класс BigDecimal включает множество режимов округления, которые были обязательными для деления в BigDecimal версиях до 5. Любые противоречия между этими стандартами ANSI и спецификацией класса BigDecimal разрешаются в пользу BigDecimal.
Поскольку одно и то же числовое значение может иметь различные представления (с разными масштабами), правила арифметики и округления должны указывать как числовой результат, так и масштаб, используемый в представлении результата.
В общем случае режимы округления и настройка точности определяют, как операции возвращают результаты с ограниченным количеством цифр, когда точный результат содержит больше цифр (возможно, бесконечно много в случае деления и квадратного корня), чем количество возвращаемых цифр. Во-первых, общее количество цифр для возврата задается настройкой MathContext; это определяет точность результата. Подсчёт цифр начинается с самой левой ненулевой цифры точного результата. Режим округления определяет, как любые отброшенные хвостовые цифры влияют на возвращаемый результат.
Для всех арифметических операторов операция выполняется так, как будто сначала вычисляется точный промежуточный результат, а затем он округляется до заданного количества цифр (если необходимо) с использованием выбранного режима округления. Если точный результат не возвращается, некоторые разряды точного результата отбрасываются. При округления, увеличивающем значение возвращаемого результата, возможно создание нового разряда, так как происходит перенос в старший разряд с «9». Например, округление значения 999,9 до трех цифр с округлением вверх будет численно равно одной тысяче, представленной как 100×101. В таких случаях новая «1» является старшим разрядом возвращаемого результата.
Помимо логического точного результата, каждая арифметическая операция имеет предпочтительный масштаб для представления результата. Предпочтительный масштаб для каждой операции указан в таблице ниже.
| Операция | Предпочтительный масштаб результата |
|---|---|
| Сложение | max(масштаб слагаемого, масштаб слагаемого) |
| Вычитание | max(масштаб уменьшаемого, масштаб вычитаемого) |
| Умножение | масштаб множителя + масштаб множимого |
| Деление | масштаб делимого - масштаб делителя |
| Квадратный корень | масштаб подкоренного выражения / 2 |
1/32 - это 0.03125. Перед округлением масштаб логического точного промежуточного результата является предпочтительным масштабом для данной операции. Если точный числовой результат не может быть представлен в precision цифрах, округление выбирает набор цифр для возврата, и масштаб результата уменьшается от масштаба промежуточного результата до наименьшего масштаба, который может представить precision цифр, фактически возвращаемые. Если точный результат может быть представлен не более чем в precision цифрах, возвращается представление результата с масштабом, наиболее близким к предпочтительному масштабу. В частности, точно представимый частный может быть представлен меньше чем precision цифрами путем удаления хвостовых нулей и уменьшения масштаба. Например, округление до трех цифр с использованием режима округления floor,
19/100 = 0.19 // integer=19, scale=2
но
21/110 = 0.190 // integer=190, scale=3
Обратите внимание, что для сложения, вычитания и умножения уменьшение масштаба будет равно количеству разрядов точного результата, которые отбрасываются. Если округление вызывает перенос, чтобы создать новый старший разряд, то отбрасывается дополнительный разряд результата, чем при отсутствии нового разряда.
Другие методы могут иметь несколько отличную семантику округления. Например, результат метода pow, использующего указанный алгоритм, иногда может отличаться от округленного математического результата более чем на единицу в последнем разряде, одной ulp.
Для манипулирования масштабом объекта BigDecimal предоставляются два типа операций: операции масштабирования/округления и операции перемещения десятичной точки. Операции масштабирования/округления (setScale и round) возвращают объект BigDecimal, значение которого приблизительно (или точно) равно значению операнда, но масштаб или точность которого равны заданному значению; то есть, они увеличивают или уменьшают точность хранимого числа с минимальным влиянием на его значение. Операции перемещения десятичной точки (movePointLeft и movePointRight) возвращают объект BigDecimal, созданный из операнда путем перемещения десятичной точки на заданное расстояние в заданном направлении.
Для краткости и ясности в описаниях методов класса BigDecimal используется псевдокод. Выражение псевдокода (i + j) является сокращением от «объект BigDecimal, значение которого равно значению BigDecimal i, прибавленному к значению BigDecimal j». Выражение псевдокода (i == j) является сокращением от «true тогда и только тогда, когда BigDecimal i представляет то же значение, что и BigDecimal j». Другие выражения псевдокода интерпретируются аналогично. Квадратные скобки используются для обозначения пары определенного BigInteger и масштаба, определяющей значение BigDecimal; например, [19, 2] - это BigDecimal, численно равное 0,19, со масштабом 2.
Все методы и конструкторы этого класса выбрасывают исключение NullPointerException, если в качестве входного параметра передается ссылка на объект null.
- Примечание по API:
- Следует проявлять осторожность, если объекты
BigDecimalиспользуются в качестве ключей вSortedMapили в качестве элементов вSortedSet, так как естественный порядокBigDecimalнесовместим с equals. См.Comparable,SortedMapилиSortedSetдля получения дополнительной информации. - С момента:
- 1.1
- См. также:
-
BigInteger,MathContext,RoundingMode,SortedMap,SortedSet, Форматированный вывод
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static BigDecimal | ONE | Значение 1 со масштабом 0. |
static int | ROUND_CEILING | Устарело. Используйте RoundingMode.CEILING вместо этого. |
static int | ROUND_DOWN | Устарело. Используйте RoundingMode.DOWN вместо этого. |
static int | ROUND_FLOOR | Устарело. Используйте RoundingMode.FLOOR вместо этого. |
static int | ROUND_HALF_DOWN | Устарело. Используйте RoundingMode.HALF_DOWN вместо этого. |
static int | ROUND_HALF_EVEN | Устарело. Используйте RoundingMode.HALF_EVEN вместо этого. |
static int | ROUND_HALF_UP | Устарело. Используйте RoundingMode.HALF_UP вместо этого. |
static int | ROUND_UNNECESSARY | Устарело. Используйте RoundingMode.UNNECESSARY вместо этого. |
static int | ROUND_UP | Устарело. Используйте RoundingMode.UP вместо этого. |
static BigDecimal | TEN | Значение 10 со масштабом 0. |
static BigDecimal | ZERO | Значение 0 со масштабом 0. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
BigDecimal(char[] in) | Преобразует строковое представление массива символов |
BigDecimal(char[] in,
int offset,
int len) | Преобразует строковое представление массива символов |
BigDecimal(char[] in,
int offset,
int len,
MathContext mc) | Преобразует строковое представление массива символов |
BigDecimal(char[] in,
MathContext mc) | Преобразует строковое представление массива символов |
BigDecimal(double val) | Преобразует |
BigDecimal(double val,
MathContext mc) | Преобразует |
BigDecimal(int val) | Преобразует |
BigDecimal(int val,
MathContext mc) | Преобразует |
BigDecimal(long val) | Преобразует |
BigDecimal(long val,
MathContext mc) | Преобразует |
BigDecimal(String val) | Преобразует строковое представление |
BigDecimal(String val,
MathContext mc) | Преобразует строковое представление |
BigDecimal(BigInteger val) | Преобразует |
BigDecimal(BigInteger unscaledVal,
int scale) | Преобразует значение |
BigDecimal(BigInteger unscaledVal,
int scale,
MathContext mc) | Преобразует значение |
BigDecimal(BigInteger val,
MathContext mc) | Преобразует |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
BigDecimal | abs() | Возвращает |
BigDecimal | abs(MathContext mc) | Возвращает |
BigDecimal | add(BigDecimal augend) | Возвращает |
BigDecimal | add(BigDecimal augend,
MathContext mc) | Возвращает |
byte | byteValueExact() | Преобразует этот |
int | compareTo(BigDecimal val) | Сравнивает этот |
BigDecimal | divide(BigDecimal divisor) | Возвращает |
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 | divide(BigDecimal divisor,
MathContext mc) | Возвращает |
BigDecimal | divide(BigDecimal divisor,
RoundingMode roundingMode) | Возвращает |
BigDecimal[] | divideAndRemainder(BigDecimal divisor) | Возвращает массив из двух элементов |
BigDecimal[] | divideAndRemainder(BigDecimal divisor,
MathContext mc) | Возвращает массив из двух элементов |
BigDecimal | divideToIntegralValue(BigDecimal divisor) | Возвращает |
BigDecimal | divideToIntegralValue(BigDecimal divisor,
MathContext mc) | Возвращает |
double | doubleValue() | Преобразует этот |
boolean | equals(Object x) | Сравнивает этот |
float | floatValue() | Преобразует этот |
int | hashCode() | Возвращает хеш-код для этого |
int | intValue() | Преобразует этот |
int | intValueExact() | Преобразует этот |
long | longValue() | Преобразует этот |
long | longValueExact() | Преобразует этот |
BigDecimal | max(BigDecimal val) | Возвращает максимальное значение между этим |
BigDecimal | min(BigDecimal val) | Возвращает минимальное значение между этим |
BigDecimal | movePointLeft(int n) | Возвращает |
BigDecimal | movePointRight(int n) | Возвращает |
BigDecimal | multiply(BigDecimal multiplicand) | Возвращает |
BigDecimal | multiply(BigDecimal multiplicand,
MathContext mc) | Возвращает |
BigDecimal | negate() | Возвращает |
BigDecimal | negate(MathContext mc) | Возвращает |
BigDecimal | plus() | Возвращает |
BigDecimal | plus(MathContext mc) | Возвращает |
BigDecimal | pow(int n) | Возвращает |
BigDecimal | pow(int n,
MathContext mc) | Возвращает |
int | precision() | Возвращает точность этого |
BigDecimal | remainder(BigDecimal divisor) | Возвращает |
BigDecimal | remainder(BigDecimal divisor,
MathContext mc) | Возвращает |
BigDecimal | round(MathContext mc) | Возвращает |
int | scale() | Возвращает масштаб этого |
BigDecimal | scaleByPowerOfTen(int n) | Возвращает BigDecimal, численное значение которого равно ( |
BigDecimal | setScale(int newScale) | Возвращает |
BigDecimal | setScale(int newScale,
int roundingMode) | Устарело. Вместо этого метода следует использовать setScale(int, RoundingMode). |
BigDecimal | setScale(int newScale,
RoundingMode roundingMode) | Возвращает |
short | shortValueExact() | Преобразует этот |
int | signum() | Возвращает функцию знака этого |
BigDecimal | sqrt(MathContext mc) | Возвращает приближение квадратного корня из |
|---|---|---|
BigDecimal | stripTrailingZeros() | Возвращает |
BigDecimal | subtract(BigDecimal subtrahend) | Возвращает |
BigDecimal | subtract(BigDecimal subtrahend,
MathContext mc) | Возвращает |
BigInteger | toBigInteger() | Преобразует этот |
BigInteger | toBigIntegerExact() | Преобразует этот |
String | toEngineeringString() | Возвращает строковое представление этого |
String | toPlainString() | Возвращает строковое представление этого |
String | toString() | Возвращает строковое представление этого |
BigDecimal | ulp() | Возвращает размер ulp (единицы в последнем разряде) этого |
BigInteger | unscaledValue() | Возвращает |
static BigDecimal | valueOf(double val) | Преобразует |
static BigDecimal | valueOf(long val) | Преобразует значение |
static BigDecimal | valueOf(long unscaledVal,
int scale) | Преобразует немасштабированное значение |
Методы, объявленные в классе java.lang.Number
byteValue, shortValue Методы, объявленные в классе java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Подробное описание полей
ZERO
public static final BigDecimal ZERO
Значение 0 с масштабом 0.
- Since:
- 1.5
ONE
public static final BigDecimal ONE
Значение 1 с масштабом 0.
- Since:
- 1.5
TEN
public static final BigDecimal TEN
Значение 10 с масштабом 0.
- Since:
- 1.5
ROUND_UP
@Deprecated(since="9") public static final int ROUND_UP
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), при этом разрешая указать подмассив.
- Примечание реализации:
- Если последовательность символов уже доступна в символьном массиве, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора
BigDecimal(String). - Параметры:
-
in- символьный массив, являющийся источником символов. -
offset- первый символ в массиве для проверки. -
len- количество символов для рассмотрения. - Исключение:
-
NumberFormatException- еслиinне является корректным представлениемBigDecimalили определенный подмассив выходит за пределыin. - С:
- 1.5
BigDecimal
public BigDecimal(char[] in,
int offset,
int len,
MathContext mc) Преобразует строковое представление символьного массива BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), при этом разрешая указать подмассив и применяя округление в соответствии с настройками контекста.
- Примечание реализации:
- Если последовательность символов уже доступна в символьном массиве, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора
BigDecimal(String). - Параметры:
-
in- символьный массив, являющийся источником символов. -
offset- первый символ в массиве для проверки. -
len- количество символов для рассмотрения. -
mc- контекст для использования. - Исключение:
-
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY. -
NumberFormatException- еслиinне является корректным представлениемBigDecimalили определенный подмассив выходит за пределыin. - С:
- 1.5
BigDecimal
public BigDecimal(char[] in)
Преобразует строковое представление символьного массива BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String).
- Примечание реализации:
- Если последовательность символов уже доступна в виде символьного массива, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора
BigDecimal(String). - Параметры:
-
in- символьный массив, являющийся источником символов. - Исключение:
-
NumberFormatException- еслиinне является корректным представлениемBigDecimal. - С:
- 1.5
BigDecimal
public BigDecimal(char[] in,
MathContext mc) Преобразует строковое представление символьного массива BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.
- Примечание реализации:
- Если последовательность символов уже доступна в виде символьного массива, использование этого конструктора быстрее, чем преобразование символьнго массива в строку и использование конструктора
BigDecimal(String). - Параметры:
-
in- символьный массив, являющийся источником символов. -
mc- контекст для использования. - Исключение:
-
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY. -
NumberFormatException- еслиinне является корректным представлениемBigDecimal. - С:
- 1.5
BigDecimal
public BigDecimal(String val)
Преобразует строковое представление BigDecimal в BigDecimal. Строковое представление состоит из необязательного знака, '+' ( '\u002B') или '-' ('\u002D'), за которым следует последовательность нуля или более десятичных цифр ("целая часть"), необязательно за которой следует дробная часть, необязательно за которой следует экспонента.
Дробная часть состоит из десятичной точки, за которой следуют ноль или более десятичных цифр. Строка должна содержать по крайней мере одну цифру либо в целой, либо в дробной части. Число, образованное знаком, целой и дробной частью, называется мантиссой.
Экспонента состоит из символа 'e' ('\u0065') или 'E' ('\u0045'), за которым следует одна или более десятичных цифр. Значение экспоненты должно лежать в диапазоне от -Integer.MAX_VALUE (Integer.MIN_VALUE+1) до Integer.MAX_VALUE, включительно.
Более формально, строки, принимаемые этим конструктором, описываются следующей грамматикой:
- BigDecimalString:
- Signopt Significand Exponentopt
- Sign:
-
+- - Significand:
-
IntegerPart
.FractionPartopt.FractionPart- IntegerPart
- IntegerPart:
- Digits
- FractionPart:
- Digits
- Exponent:
- ExponentIndicator SignedInteger
- ExponentIndicator:
-
eE - SignedInteger:
- Signopt Digits
- Digits:
-
Digit
- Digits Digit
- Digit:
- любой символ, для которого
Character.isDigit(char)возвращаетtrue, включая 0, 1, 2 ...
Масштаб возвращаемого BigDecimal будет равен количеству цифр в дробной части или нулю, если строка не содержит десятичной точки, с учетом корректировки на экспоненту; если строка содержит экспоненту, значение экспоненты вычитается из масштаба. Значение результата масштаба должно лежать в диапазоне от Integer.MIN_VALUE до Integer.MAX_VALUE включительно.
Преобразование символов в цифры обеспечивается Character.digit(char, int) с установкой на преобразование в систему счисления 10. В строке не должно содержаться дополнительных символов (например, пробелов).
Примеры:
Значение возвращаемого BigDecimal равно мантиссе × 10 экспоненте. Для каждой строки слева показано соответствующее представление [BigInteger, scale] справа.
"0" [0,0] "0.00" [0,2] "123" [123,0] "-123" [-123,0] "1.23E3" [123,-1] "1.23E+3" [123,-1] "12.3E+7" [123,-6] "12.0" [120,1] "12.3" [123,1] "0.00123" [123,5] "-1.23E-12" [-123,14] "1234.5E-4" [12345,5] "0E+7" [0,-7] "-0" [0,0]
- Примечание API:
- Для значений, отличных от
floatиdoubleNaN и ±Infinity, этот конструктор совместим со значениями, возвращаемымиFloat.toString(float)иDouble.toString(double). Это, как правило, предпочтительный способ преобразованияfloatилиdoubleв BigDecimal, так как он не страдает от непредсказуемости конструктораBigDecimal(double). - Параметры:
-
val- строковое представлениеBigDecimal. - Исключение:
-
NumberFormatException- еслиvalне является корректным представлениемBigDecimal.
BigDecimal
public BigDecimal(String val,
MathContext mc) Преобразует строковое представление BigDecimal в BigDecimal, принимая те же строки, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.
- Параметры:
-
val- строковое представлениеBigDecimal. -
mc- контекст для использования. - Исключение:
-
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY. -
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(или, вообще, как двоичная дробь конечной длины). - Конструктор
String, с другой стороны, совершенно предсказуем: записьnew BigDecimal("0.1")создаётBigDecimal, который точно равен 0.1, как и ожидалось. Поэтому рекомендуется использовать конструктор конструктор строки вместо этого. - Когда
doubleнеобходимо использовать в качестве источника дляBigDecimal, обратите внимание, что этот конструктор обеспечивает точное преобразование; он не даёт тот же результат, что и преобразованиеdoubleвStringс помощью методаDouble.toString(double), а затем использование конструктораBigDecimal(String). Чтобы получить этот результат, используйте методstaticvalueOf(double).
- Параметры:
-
val-doubleзначение, которое необходимо преобразовать вBigDecimal. - Исключения:
-
NumberFormatException- еслиvalявляется бесконечным или NaN.
BigDecimal
public BigDecimal(double val,
MathContext mc) Преобразует double в BigDecimal, с округлением в соответствии с параметрами контекста. Масштаб BigDecimal — наименьшее значение, при котором (10scale × val) является целым числом.
Результаты этого конструктора могут быть несколько непредсказуемыми, и его использование не рекомендуется; см. примечания к конструктору BigDecimal(double).
- Параметры:
-
val-doubleзначение, которое необходимо преобразовать вBigDecimal. -
mc- контекст для использования. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления — UNNECESSARY. -
NumberFormatException- еслиvalявляется бесконечным или NaN. - С:
- 1.5
BigDecimal
public BigDecimal(BigInteger val)
Преобразует BigInteger в BigDecimal. Масштаб BigDecimal равен нулю.
- Параметры:
-
val-BigIntegerзначение, которое необходимо преобразовать вBigDecimal.
BigDecimal
public BigDecimal(BigInteger val,
MathContext mc) Преобразует BigInteger в BigDecimal с округлением в соответствии с параметрами контекста. Масштаб BigDecimal равен нулю.
- Параметры:
-
val-BigIntegerзначение, которое необходимо преобразовать вBigDecimal. -
mc- контекст для использования. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления —UNNECESSARY. - С:
- 1.5
BigDecimal
public BigDecimal(BigInteger unscaledVal,
int scale) Преобразует BigInteger неопределённое значение и int масштаб в BigDecimal. Значение BigDecimal равно (unscaledVal × 10-scale).
- Параметры:
-
unscaledVal- неопределённое значениеBigDecimal. -
scale- масштабBigDecimal.
BigDecimal
public BigDecimal(BigInteger unscaledVal,
int scale,
MathContext mc) Преобразует BigInteger неопределённое значение и int масштаб в BigDecimal с округлением в соответствии с параметрами контекста. Значение BigDecimal равно (unscaledVal ×
10-scale), округлено согласно параметрам precision и режима округления.
- Параметры:
-
unscaledVal- неопределённое значениеBigDecimal. -
scale- масштабBigDecimal. -
mc- контекст для использования. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления —UNNECESSARY. - С:
- 1.5
BigDecimal
public BigDecimal(int val)
Преобразует int в BigDecimal. Масштаб BigDecimal равен нулю.
- Параметры:
-
val-intзначение, которое необходимо преобразовать вBigDecimal. - С:
- 1.5
BigDecimal
public BigDecimal(int val,
MathContext mc) Преобразует int в BigDecimal с округлением в соответствии с параметрами контекста. Масштаб BigDecimal, до любого округления, равен нулю.
- Параметры:
-
val-intзначение, которое необходимо преобразовать вBigDecimal. -
mc- контекст для использования. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления —UNNECESSARY. - С:
- 1.5
BigDecimal
public BigDecimal(long val)
Преобразует long в BigDecimal. Масштаб BigDecimal равен нулю.
- Параметры:
-
val-longзначение, которое необходимо преобразовать вBigDecimal. - С:
- 1.5
BigDecimal
public BigDecimal(long val,
MathContext mc) Преобразует long в BigDecimal с округлением в соответствии с параметрами контекста. Масштаб BigDecimal, до любого округления, равен нулю.
- Параметры:
-
val-longзначение, которое необходимо преобразовать вBigDecimal. -
mc- контекст для использования. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления —UNNECESSARY. - С:
- 1.5
Методы
valueOf
public static BigDecimal valueOf(long unscaledVal,
int scale) Преобразует не масштабированное значение и масштаб в BigDecimal.
- API Note:
- Этот статический фабричный метод предоставляется предпочтительнее, чем конструктор (
long,int), поскольку он позволяет повторно использовать часто используемые значенияBigDecimal. - Параметры:
-
unscaledVal- не масштабированное значениеBigDecimal. -
scale- масштабBigDecimal. - Возвращает:
- a
BigDecimal, значение которого равно(unscaledVal × 10-scale).
valueOf
public static BigDecimal valueOf(long val)
Преобразует значение long в BigDecimal с масштабом ноль.
- API Note:
- Этот статический фабричный метод предоставляется предпочтительнее, чем конструктор (
long), поскольку он позволяет повторно использовать часто используемые значенияBigDecimal. - Параметры:
-
val- значениеBigDecimal. - Возвращает:
- a
BigDecimal, значение которого равноval.
valueOf
public static BigDecimal valueOf(double val)
Преобразует double в BigDecimal, используя каноническое строковое представление double, предоставленное методом Double.toString(double).
- API Note:
- Это, как правило, предпочтительный способ преобразования
double(илиfloat) вBigDecimal, поскольку возвращаемое значение равно значению, полученному в результате созданияBigDecimalиз результата использованияDouble.toString(double). - Параметры:
-
val-doubleдля преобразования вBigDecimal. - Возвращает:
- a
BigDecimal, значение которого равно или приблизительно равно значениюval. - Исключения:
-
NumberFormatException- еслиvalбесконечно или NaN. - С версии:
- 1.5
add
public BigDecimal add(BigDecimal augend)
Возвращает BigDecimal, значение которого равно (this +
augend), а масштаб равен max(this.scale(),
augend.scale()).
- Параметры:
-
augend- значение, которое нужно добавить к этомуBigDecimal. - Возвращает:
this + augend
add
public BigDecimal add(BigDecimal augend,
MathContext mc) Возвращает BigDecimal, значение которого равно (this + augend), с округлением в соответствии с настройками контекста. Если любое из чисел равно нулю, а настройка точности отлична от нуля, то в качестве результата используется другое число, округленное при необходимости.
- Параметры:
-
augend- значение, которое нужно добавить к этомуBigDecimal. -
mc- контекст для использования. - Возвращает:
-
this + augend, округленное по необходимости. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления равенUNNECESSARY. - С версии:
- 1.5
subtract
public BigDecimal subtract(BigDecimal subtrahend)
Возвращает BigDecimal, значение которого равно (this -
subtrahend), а масштаб равен max(this.scale(),
subtrahend.scale()).
- Параметры:
-
subtrahend- значение, которое нужно вычесть из этогоBigDecimal. - Возвращает:
this - subtrahend
subtract
public BigDecimal subtract(BigDecimal subtrahend,
MathContext mc) Возвращает BigDecimal, значение которого равно (this - subtrahend), с округлением в соответствии с настройками контекста. Если subtrahend равно нулю, то используется это значение, округленное при необходимости, в качестве результата. Если это значение равно нулю, то результатом является subtrahend.negate(mc).
- Параметры:
-
subtrahend- значение, которое нужно вычесть из этогоBigDecimal. -
mc- контекст для использования. - Возвращает:
-
this - subtrahend, округленное по необходимости. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления равенUNNECESSARY. - С версии:
- 1.5
multiply
public BigDecimal multiply(BigDecimal multiplicand)
Возвращает BigDecimal, значение которого равно (this ×
multiplicand), а масштаб равен (this.scale() +
multiplicand.scale()).
- Параметры:
-
multiplicand- значение, на которое нужно умножить этоBigDecimal. - Возвращает:
this * multiplicand
multiply
public BigDecimal multiply(BigDecimal multiplicand,
MathContext mc) Возвращает BigDecimal, значение которого равно (this ×
multiplicand), с округлением в соответствии с настройками контекста.
- Параметры:
-
multiplicand- значение, на которое нужно умножить этоBigDecimal. -
mc- контекст для использования. - Возвращает:
-
this * multiplicand, округленное по необходимости. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления равенUNNECESSARY. - С версии:
- 1.5
divide
@Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor,
int scale,
int roundingMode) divide(BigDecimal, int, RoundingMode) следует использовать вместо этого устаревшего метода.Возвращает BigDecimal, значение которого равно (this /
divisor), а масштаб указан. Если для получения результата с указанным масштабом необходимо выполнить округление, применяется указанный режим округления.
- Параметры:
-
divisor- значение, на которое нужно разделить этоBigDecimal. -
scale- масштаб частногоBigDecimal, которое нужно вернуть. -
roundingMode- режим округления для применения. - Возвращает:
this / divisor- Исключения:
-
ArithmeticException- еслиdivisorравно нулю,roundingMode==ROUND_UNNECESSARYи указанного масштаба недостаточно для точного представления результата деления. -
IllegalArgumentException- еслиroundingModeне представляет допустимый режим округления. - См. также:
-
ROUND_UP,ROUND_DOWN,ROUND_CEILING,ROUND_FLOOR,ROUND_HALF_UP,ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_UNNECESSARY
divide
public BigDecimal divide(BigDecimal divisor,
int scale,
RoundingMode roundingMode) Возвращает BigDecimal, значение которого равно (this /
divisor), а масштаб указан. Если для получения результата с указанным масштабом необходимо выполнить округление, применяется указанный режим округления.
- Параметры:
-
divisor- значение, на которое нужно разделить этоBigDecimal. -
scale- масштаб частногоBigDecimal, которое нужно вернуть. -
roundingMode- режим округления для применения. - Возвращает:
this / divisor- Исключения:
-
ArithmeticException- еслиdivisorравно нулю,roundingMode==RoundingMode.UNNECESSARYи указанного масштаба недостаточно для точного представления результата деления. - С версии:
- 1.5
divide
@Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor,
int roundingMode) divide(BigDecimal, RoundingMode) следует использовать вместо этого устаревшего метода.Возвращает BigDecimal, значение которого равно (this /
divisor), а масштаб равен this.scale(). Если для получения результата с заданным масштабом необходимо выполнить округление, применяется указанный режим округления.
- Параметры:
-
divisor- значение, на которое нужно разделить этоBigDecimal. -
roundingMode- режим округления для применения. - Возвращает:
this / divisor- Исключения:
-
ArithmeticException- еслиdivisor==0, илиroundingMode==ROUND_UNNECESSARYиthis.scale()недостаточно для точного представления результата деления. -
IllegalArgumentException- еслиroundingModeне представляет допустимый режим округления. - См. также:
-
ROUND_UP,ROUND_DOWN,ROUND_CEILING,ROUND_FLOOR,ROUND_HALF_UP,ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_UNNECESSARY
divide
public BigDecimal divide(BigDecimal divisor,
RoundingMode roundingMode) Возвращает BigDecimal, значение которого равно (this /
divisor), а масштаб равен this.scale(). Если для получения результата с заданным масштабом необходимо выполнить округление, применяется указанный режим округления.
- Параметры:
-
divisor- значение, на которое нужно разделить этоBigDecimal. -
roundingMode- режим округления для применения. - Возвращает:
this / divisor- Исключения:
-
ArithmeticException- еслиdivisor==0, илиroundingMode==RoundingMode.UNNECESSARYиthis.scale()недостаточно для точного представления результата деления. - С версии:
- 1.5
divide
public BigDecimal divide(BigDecimal divisor)
Возвращает BigDecimal, значение которого равно (this /
divisor), а предпочтительный масштаб равен (this.scale() -
divisor.scale()); если точное частное не может быть представлено (потому что оно имеет непериодическое десятичное разложение), выбрасывается ArithmeticException.
- Параметры:
-
divisor- значение, на которое нужно разделить этоBigDecimal. - Возвращает:
this / divisor- Исключения:
-
ArithmeticException- если точное частное не имеет конечного десятичного разложения - С версии:
- 1.5
divide
public BigDecimal divide(BigDecimal divisor,
MathContext mc) Возвращает BigDecimal, значение которого равно (this /
divisor), с округлением в соответствии с настройками контекста.
- Параметры:
-
divisor- делитель для этогоBigDecimal. -
mc- используемый контекст. - Возвращает:
-
this / divisor, округлённое по необходимости. - Исключения:
-
ArithmeticException- если результат неточен, но режим округления равенUNNECESSARYилиmc.precision == 0, и частное имеет бесконечную десятичную дробь. - С:
- 1.5
divideToIntegralValue
public BigDecimal divideToIntegralValue(BigDecimal divisor)
Возвращает BigDecimal, значение которого равно целой части частного (this / divisor) с округлением вниз. Предпочтительная разрядность результата — (this.scale() -
divisor.scale()).
- Параметры:
-
divisor- делитель для этогоBigDecimal. - Возвращает:
- Целая часть
this / divisor. - Исключения:
-
ArithmeticException- еслиdivisor==0 - С:
- 1.5
divideToIntegralValue
public BigDecimal divideToIntegralValue(BigDecimal divisor,
MathContext mc) Возвращает BigDecimal, значение которого равно целой части (this / divisor). Так как целая часть точного частного не зависит от режима округления, режим округления не влияет на значения, возвращаемые этим методом. Предпочтительная разрядность результата — (this.scale() - divisor.scale()). Исключение ArithmeticException выбрасывается, если целая часть точного частного требует более чем mc.precision цифр.
- Параметры:
-
divisor- делитель для этогоBigDecimal. -
mc- используемый контекст. - Возвращает:
- Целая часть
this / divisor. - Исключения:
-
ArithmeticException- еслиdivisor==0 -
ArithmeticException- еслиmc.precision> 0 и результат требует точности более чемmc.precisionцифр. - С:
- 1.5
remainder
public BigDecimal remainder(BigDecimal divisor)
Возвращает BigDecimal, значение которого равно (this % divisor).
Остаток вычисляется как this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)). Обратите внимание, что это не операция modulo (результат может быть отрицательным).
- Параметры:
-
divisor- делитель для этогоBigDecimal. - Возвращает:
-
this % divisor. - Исключения:
-
ArithmeticException- еслиdivisor==0 - С:
- 1.5
remainder
public BigDecimal remainder(BigDecimal divisor,
MathContext mc) Возвращает BigDecimal, значение которого равно (this %
divisor) с округлением в соответствии с настройками контекста. Настройки MathContext влияют на неявное деление, используемое для вычисления остатка. Вычисление остатка по определению точно. Следовательно, остаток может содержать более чем mc.getPrecision() цифр.
Остаток вычисляется как this.subtract(this.divideToIntegralValue(divisor,
mc).multiply(divisor)). Обратите внимание, что это не операция modulo (результат может быть отрицательным).
- Параметры:
-
divisor- делитель для этогоBigDecimal. -
mc- используемый контекст. - Возвращает:
-
this % divisor, округлённое по необходимости. - Исключения:
-
ArithmeticException- еслиdivisor==0 -
ArithmeticException- если результат неточен, но режим округления равенUNNECESSARY, илиmc.precision> 0, а результатthis.divideToIntgralValue(divisor)потребовал бы точности более чемmc.precisionцифр. - С:
- 1.5
- См. также:
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
divideAndRemainder
public BigDecimal[] divideAndRemainder(BigDecimal divisor)
Возвращает массив из двух элементов BigDecimal, содержащий результат divideToIntegralValue, за которым следует результат remainder для двух операндов.
Обратите внимание, что если необходимы и целая часть частного, и остаток, этот метод быстрее, чем использование методов divideToIntegralValue и remainder по отдельности, потому что деление необходимо выполнить только один раз.
- Параметры:
-
divisor- делитель для этогоBigDecimalи вычисляемый остаток. - Возвращает:
- массив из двух элементов типа
BigDecimal: частное (результатdivideToIntegralValue) — первый элемент, остаток — последний. - Исключения:
-
ArithmeticException- еслиdivisor==0 - С:
- 1.5
- См. также:
-
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext),remainder(java.math.BigDecimal, java.math.MathContext)
divideAndRemainder
public BigDecimal[] divideAndRemainder(BigDecimal divisor,
MathContext mc) Возвращает массив из двух элементов BigDecimal, содержащий результат divideToIntegralValue, за которым следует результат remainder для двух операндов с округлением в соответствии с настройками контекста.
Обратите внимание, что если необходимы и целая часть частного, и остаток, этот метод быстрее, чем использование методов divideToIntegralValue и remainder по отдельности, потому что деление необходимо выполнить только один раз.
- Параметры:
-
divisor- делитель для этогоBigDecimalи вычисляемый остаток. -
mc- используемый контекст. - Возвращает:
- массив из двух элементов типа
BigDecimal: частное (результатdivideToIntegralValue) — первый элемент, остаток — последний. - Исключения:
-
ArithmeticException- еслиdivisor==0 -
ArithmeticException- если результат неточен, но режим округления равенUNNECESSARY, илиmc.precision> 0, а результатthis.divideToIntgralValue(divisor)потребовал бы точности более чемmc.precisionцифр. - С:
- 1.5
- См. также:
-
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext),remainder(java.math.BigDecimal, java.math.MathContext)
sqrt
public BigDecimal sqrt(MathContext mc)
Возвращает приближение квадратного корня из this с округлением в соответствии с настройками контекста.
Предпочтительная разрядность возвращаемого результата равна this.scale()/2. Значение возвращаемого результата всегда находится в пределах одной единицы последнего разряда от точного десятичного значения для заданной точности. Если режим округления — HALF_UP, HALF_DOWN или HALF_EVEN, результат находится в пределах половины единицы последнего разряда от точного десятичного значения.
Особые случаи:
- Квадратный корень из числа, численно равного
ZERO, численно равенZEROс предпочтительной разрядностью в соответствии с общим правилом выше. В частности, дляZERO,ZERO.sqrt(mc).equals(ZERO)верно с любымMathContextв качестве аргумента.
- Параметры:
-
mc- используемый контекст. - Возвращает:
- квадратный корень из
this. - Исключения:
-
ArithmeticException- еслиthisменьше нуля. -
ArithmeticException- если требуется точный результат (mc.getPrecision()==0) и нет конечной десятичной записи точного результата -
ArithmeticException- если(mc.getRoundingMode()==RoundingMode.UNNECESSARY) и точный результат не помещается вmc.getPrecision()цифр. - С:
- 9
- См. также:
BigInteger.sqrt()
pow
public BigDecimal pow(int n)
Возвращает BigDecimal, значение которого равно (thisn). Возведение в степень вычисляется точно с неограниченной точностью.
Параметр n должен быть в диапазоне от 0 до 999999999 включительно. ZERO.pow(0) возвращает ONE. Обратите внимание, что в будущих версиях диапазон допустимых показателей степени этого метода может быть расширен.
- Параметры:
-
n- показатель степени для возведения этогоBigDecimal. - Возвращает:
thisn- Исключения:
-
ArithmeticException- еслиnнаходится вне диапазона. - С:
- 1.5
pow
public BigDecimal pow(int n,
MathContext mc) Возвращает BigDecimal, значение которого равно (thisn). Текущая реализация использует основной алгоритм, определённый в ANSI-стандарте X3.274-1996, с округлением в соответствии с настройками контекста. В общем случае, возвращаемое числовое значение находится в пределах двух единиц последнего разряда от точного числового значения для выбранной точности. Обратите внимание, что в будущих версиях может быть использован другой алгоритм с уменьшенным допустимым пределом ошибки и расширенным диапазоном допустимых показателей степени.
Алгоритм X3.274-1996:
- Исключение
ArithmeticExceptionвыбрасывается, если-
abs(n) > 999999999 -
mc.precision == 0иn < 0 -
mc.precision > 0иnимеет более чемmc.precisionдесятичных цифр
-
- Если
nравно нулю, возвращаетсяONE, даже еслиthisравно нулю, в противном случае- Если
nположительно, результат вычисляется с помощью техники возведения в степень посредством повторного возведения в квадрат в единый накопитель. Индивидуальные умножения с накопителем используют те же настройки контекста, что и вmc, за исключением увеличенной точности доmc.precision + elength + 1, гдеelength— количество десятичных цифр вn. - Если
nотрицательно, результат вычисляется так, как если быnбыло положительным; затем это значение делится на единицу с использованием указанной выше рабочей точности. - Конечное значение из положительного или отрицательного случая затем округляется до точности назначения.
- Если
- Параметры:
-
n- степень, к которой нужно возвести этоBigDecimal. -
mc- контекст для использования. - Возвращает:
-
thisn, используя алгоритм ANSI стандарт X3.274-1996 - Выбрасывает:
-
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY, илиnвыходит за пределы диапазона. - С тех пор:
- 1.5
abs
public BigDecimal abs()
Возвращает BigDecimal, значение которого равно абсолютному значению этого BigDecimal, а масштаб - this.scale().
- Возвращает:
abs(this)
abs
public BigDecimal abs(MathContext mc)
Возвращает BigDecimal, значение которого равно абсолютному значению этого BigDecimal, с округлением в соответствии с настройками контекста.
- Параметры:
-
mc- контекст для использования. - Возвращает:
-
abs(this), округлённый по необходимости. - Выбрасывает:
-
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY. - С тех пор:
- 1.5
negate
public BigDecimal negate()
Возвращает BigDecimal, значение которого равно (-this), а масштаб - this.scale().
- Возвращает:
-
-this.
negate
public BigDecimal negate(MathContext mc)
Возвращает BigDecimal, значение которого равно (-this), с округлением в соответствии с настройками контекста.
- Параметры:
-
mc- контекст для использования. - Возвращает:
-
-this, округлённый по необходимости. - Выбрасывает:
-
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY. - С тех пор:
- 1.5
plus
public BigDecimal plus()
Возвращает BigDecimal, значение которого равно (+this), а масштаб - this.scale().
Этот метод, который просто возвращает этот BigDecimal, включён для симметрии с методом унарного минуса negate().
- Возвращает:
-
this. - С тех пор:
- 1.5
- См. также:
negate()
plus
public BigDecimal plus(MathContext mc)
Возвращает BigDecimal, значение которого равно (+this), с округлением в соответствии с настройками контекста.
Эффект этого метода идентичен методу round(MathContext).
- Параметры:
-
mc- контекст для использования. - Возвращает:
-
this, округлённый по необходимости. Ноль возвращается с масштабом 0. - Выбрасывает:
-
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY. - С тех пор:
- 1.5
- См. также:
round(MathContext)
signum
public int signum()
Возвращает функцию знака этого BigDecimal.
- Возвращает:
- -1, 0 или 1 в зависимости от того, является ли значение этого
BigDecimalотрицательным, нулевым или положительным.
scale
public int scale()
Возвращает масштаб этого BigDecimal. Если он равен нулю или положителен, то масштаб — это количество цифр справа от десятичной точки. Если отрицателен, то неусечённое значение числа умножается на десять в степени, равной отрицательному значению масштаба. Например, масштаб -3 означает, что неусечённое значение умножается на 1000.
- Возвращает:
- масштаб этого
BigDecimal.
precision
public int precision()
Возвращает точность этого BigDecimal. (Точность — это количество цифр в неусечённом значении.)
Точность нулевого значения равна 1.
- Возвращает:
- точность этого
BigDecimal. - С тех пор:
- 1.5
unscaledValue
public BigInteger unscaledValue()
Возвращает BigInteger, значение которого равно неусечённому значению этого BigDecimal. (Вычисляет (this *
10this.scale()).)
- Возвращает:
- неусечённое значение этого
BigDecimal. - С тех пор:
- 1.2
round
public BigDecimal round(MathContext mc)
Возвращает BigDecimal, округлённый в соответствии с настройками MathContext. Если значение точности равно 0, то округление не выполняется.
Эффект этого метода идентичен методу plus(MathContext).
- Параметры:
-
mc- контекст для использования. - Возвращает:
BigDecimal, округлённый в соответствии с настройкамиMathContext.- Выбрасывает:
-
ArithmeticException- если режим округленияUNNECESSARY, и операцияBigDecimalтребует округления. - С тех пор:
- 1.5
- См. также:
plus(MathContext)
setScale
public BigDecimal setScale(int newScale,
RoundingMode roundingMode) Возвращает BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этого BigDecimal на соответствующую степень десяти для поддержания его общего значения. Если масштаб уменьшается в результате операции, неусечённое значение должно быть разделено (а не умножено), и значение может измениться; в этом случае применяется заданный режим округления к делению.
- Примечание API:
- Так как объекты BigDecimal неизменяемы, вызовы этого метода не приводят к изменению исходного объекта, в отличие от обычной практики именования методов
setX, которые изменяют полеX. Вместо этогоsetScaleвозвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым. - Параметры:
-
newScale- масштаб значенияBigDecimal, которое нужно вернуть. -
roundingMode- режим округления для применения. - Возвращает:
BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этогоBigDecimalна соответствующую степень десяти для поддержания его общего значения.- Выбрасывает:
-
ArithmeticException- еслиroundingMode==UNNECESSARYи указанная операция масштабирования потребовали бы округления. - С тех пор:
- 1.5
- См. также:
RoundingMode
setScale
@Deprecated(since="9")
public BigDecimal setScale(int newScale,
int roundingMode) setScale(int, RoundingMode) следует использовать вместо этого устаревшего метода.Возвращает BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этого BigDecimal на соответствующую степень десяти для поддержания его общего значения. Если масштаб уменьшается в результате операции, неусечённое значение должно быть разделено (а не умножено), и значение может измениться; в этом случае применяется заданный режим округления к делению.
- Примечание API:
- Так как объекты BigDecimal неизменяемы, вызовы этого метода не приводят к изменению исходного объекта, в отличие от обычной практики именования методов
setX, которые изменяют полеX. Вместо этогоsetScaleвозвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым. - Параметры:
-
newScale- масштаб значенияBigDecimal, которое нужно вернуть. -
roundingMode- режим округления для применения. - Возвращает:
BigDecimal, масштаб которого равен заданному значению, а неусечённое значение определяется умножением или делением неусечённого значения этогоBigDecimalна соответствующую степень десяти для поддержания его общего значения.- Выбрасывает:
-
ArithmeticException- еслиroundingMode==ROUND_UNNECESSARYи указанная операция масштабирования потребовали бы округления. -
IllegalArgumentException- еслиroundingModeне представляет собой допустимый режим округления. - См. также:
-
ROUND_UP,ROUND_DOWN,ROUND_CEILING,ROUND_FLOOR,ROUND_HALF_UP,ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_UNNECESSARY
setScale
public BigDecimal setScale(int newScale)
Возвращает BigDecimal, масштаб которого равен заданному значению, а значение численно равно значению этого BigDecimal. Выбрасывает ArithmeticException, если это невозможно.
Этот вызов обычно используется для увеличения масштаба, в этом случае гарантируется, что существует BigDecimal заданного масштаба и правильного значения. Вызов также может быть использован для уменьшения масштаба, если вызывающая сторона знает, что BigDecimal имеет достаточно нулей в конце своей дробной части (т. е. множителей десяти в его целой части) для изменения масштаба без изменения значения.
Этот метод возвращает тот же результат, что и двухаргументные версии setScale, но экономит вызывающей стороне хлопоты по указанию режима округления в случаях, когда он не имеет значения.
- Примечание API:
- Поскольку объекты
BigDecimalнеизменяемы, вызовы этого метода не приводят к изменению исходного объекта, вопреки общепринятой конвенции, согласно которой методы, имеющие имяsetX, изменяют полеX. Вместо этого методsetScaleвозвращает объект с соответствующей шкалой; возвращаемый объект может быть или не быть вновь выделенным. - Параметры:
-
newScale- масштаб значенияBigDecimal, которое должно быть возвращено. - Возвращает:
- объект
BigDecimal, масштаб которого равен указанному значению, а значение без масштаба определяется умножением или делением значения без масштаба этого объектаBigDecimalна соответствующую степень десяти для сохранения его общего значения. - Выбрасывает:
-
ArithmeticException- если указанная операция масштабирования требует округления. - См. также:
-
setScale(int, int),setScale(int, RoundingMode)
movePointLeft
public BigDecimal movePointLeft(int n)
Возвращает объект BigDecimal, эквивалентный этому с десятичной точкой, смещённой влево на n позиций. Если n неотрицательно, вызов просто добавляет n к масштабу. Если n отрицательно, вызов эквивалентен movePointRight(-n). Объект BigDecimal, возвращённый этим вызовом, имеет значение (this ×
10-n) и масштаб max(this.scale()+n,
0).
- Параметры:
-
n- количество позиций для смещения десятичной точки влево. - Возвращает:
- объект
BigDecimal, эквивалентный этому с десятичной точкой, смещённой влево наnпозиций. - Выбрасывает:
-
ArithmeticException- если масштаб переполнен.
movePointRight
public BigDecimal movePointRight(int n)
Возвращает объект BigDecimal, эквивалентный этому с десятичной точкой, смещённой вправо на n позиций. Если n неотрицательно, вызов просто вычитает n из масштаба. Если n отрицательно, вызов эквивалентен movePointLeft(-n). Объект BigDecimal, возвращённый этим вызовом, имеет значение (this
× 10n) и масштаб max(this.scale()-n,
0).
- Параметры:
-
n- количество позиций для смещения десятичной точки вправо. - Возвращает:
- объект
BigDecimal, эквивалентный этому с десятичной точкой, смещённой вправо наnпозиций. - Выбрасывает:
-
ArithmeticException- если масштаб переполнен.
scaleByPowerOfTen
public BigDecimal scaleByPowerOfTen(int n)
Возвращает объект BigDecimal, численное значение которого равно (this * 10n). Масштаб результата равен (this.scale() - n).
- Параметры:
-
n- показатель степени десяти для масштабирования - Возвращает:
- объект BigDecimal, численное значение которого равно (
this* 10n) - Выбрасывает:
-
ArithmeticException- если масштаб выйдет за пределы диапазона 32-битного целого числа. - С:
- 1.5
stripTrailingZeros
public BigDecimal stripTrailingZeros()
Возвращает объект BigDecimal, численно равный этому, но с удаленными из представления любыми завершающими нулями. Например, удаление завершающих нулей из значения BigDecimal 600.0, имеющего компоненты [BigInteger, scale], равные [6000, 1], даёт 6E2 с компонентами [BigInteger, scale], равными [6, -2]. Если этот объект BigDecimal численно равен нулю, возвращается BigDecimal.ZERO.
- Возвращает:
- числовой равный объект
BigDecimalс удаленными любыми завершающими нулями. - С:
- 1.5
compareTo
public int compareTo(BigDecimal val)
Сравнивает этот объект BigDecimal с указанным объектом BigDecimal. Два объекта BigDecimal, равные по значению, но имеющие разный масштаб (например, 2.0 и 2.00), считаются равными этим методом. Этот метод предоставляется вместо отдельных методов для каждого из шести булевых операторов сравнения (<, ==, >, >=, !=, <=). Рекомендуемый способ выполнения этих сравнений: (x.compareTo(y) <op> 0), где <op> — один из шести операторов сравнения.
- Определено в:
-
compareToв интерфейсеComparable<BigDecimal> - Параметры:
-
val- объектBigDecimal, с которым нужно сравнить этот объектBigDecimal. - Возвращает:
- -1, 0 или 1, если этот объект
BigDecimalчисленно меньше, равен или больше, чемval.
equals
public boolean equals(Object x)
Сравнивает этот объект BigDecimal с указанным объектом Object на равенство. В отличие от compareTo, этот метод считает два объекта BigDecimal равными только в том случае, если они равны по значению и масштабу (следовательно, 2.0 не равен 2.00 при сравнении этим методом).
- Переопределяет:
-
equalsв классеObject - Параметры:
-
x- объектObject, с которым нужно сравнить этот объектBigDecimal. - Возвращает:
-
trueтогда и только тогда, когда указанный объектObjectявляется объектомBigDecimal, значение и масштаб которого равны значению и масштабу этого объектаBigDecimal. - См. также:
-
compareTo(java.math.BigDecimal),hashCode()
min
public BigDecimal min(BigDecimal val)
Возвращает минимальное значение из этого объекта BigDecimal и val.
- Параметры:
-
val- значение, с которым вычисляется минимум. - Возвращает:
- объект
BigDecimal, значение которого равно меньшему из значений этого объектаBigDecimalиval. Если они равны, как определено методомcompareTo, возвращаетсяthis. - См. также:
compareTo(java.math.BigDecimal)
max
public BigDecimal max(BigDecimal val)
Возвращает максимальное значение из этого объекта BigDecimal и val.
- Параметры:
-
val- значение, с которым вычисляется максимум. - Возвращает:
- объект
BigDecimal, значение которого равно большему из значений этого объектаBigDecimalиval. Если они равны, как определено методомcompareTo, возвращаетсяthis. - См. также:
compareTo(java.math.BigDecimal)
hashCode
public int hashCode()
Возвращает код хэша для этого объекта BigDecimal. Обратите внимание, что два объекта BigDecimal, которые численно равны, но различаются по масштабу (например, 2.0 и 2.00), обычно не имеют одинаковый код хэша.
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- код хэша для этого объекта
BigDecimal. - См. также:
equals(Object)
toString
public String toString()
Возвращает строковое представление этого BigDecimal, используя научную запись, если нужен показатель степени.
Стандартная каноническая строковая форма BigDecimal создаётся как будто по следующим шагам: сначала абсолютное значение неразмеренного значения BigDecimal преобразуется в строку в десятичной системе счисления, используя символы '0' через '9' без ведущих нулей (за исключением случая, когда значение равно нулю, в котором случае используется единственный символ '0').
Далее вычисляется скорректированный показатель степени; это отрицательное масштабирование плюс количество символов в преобразованном неразмеренном значении минус один. То есть -scale+(ulength-1), где ulength — длина абсолютного значения неразмеренного значения в десятичных разрядах (его точность).
Если масштаб больше или равен нулю, а скорректированный показатель степени больше или равен -6, число будет преобразовано в строковую форму без использования экспоненциальной записи. В этом случае, если масштаб равен нулю, десятичная точка не добавляется, а если масштаб положителен, десятичная точка будет вставлена, и масштаб укажет количество символов справа от десятичной точки. '0' символов добавляются слева от преобразованного неразмеренного значения по необходимости. Если после этой вставки перед десятичной точкой нет символа, то добавляется обычный символ '0'.
В противном случае (то есть, если масштаб отрицательный или скорректированный показатель степени меньше -6), число будет преобразовано в строковую форму с использованием экспоненциальной записи. В этом случае, если преобразованное BigInteger имеет более одной цифры, десятичная точка вставляется после первой цифры. Затем к преобразованному неразмеренному значению (возможно, с вставленной десятичной точкой) добавляется показатель степени в строковой форме; это включает букву 'E', непосредственно за которой следует скорректированный показатель степени, преобразованный в строковую форму. Последний представлен в десятичной системе счисления, используя символы '0' через '9' без ведущих нулей, и всегда предваряется знаком '-' ('\u002D'), если скорректированный показатель степени отрицательный, '+' ('\u002B') в противном случае.
Наконец, вся строка предваряется знаком минус '−' ('\u002D'), если неразмеренное значение меньше нуля. Знак не добавляется, если неразмеренное значение равно нулю или положительно.
Примеры:
Для каждого представления [неразмеренное значение, масштаб] слева показана результирующая строка справа.
[123,0] "123" [-123,0] "-123" [123,-1] "1.23E+3" [123,-3] "1.23E+5" [123,1] "12.3" [123,5] "0.00123" [123,10] "1.23E-8" [-123,12] "-1.23E-10"Примечания:
- Существует взаимно однозначное соответствие между различимыми
BigDecimalзначениями и результатом этого преобразования. То есть, каждое различимоеBigDecimalзначение (неразмеренное значение и масштаб) имеет уникальное строковое представление в результате примененияtoString. Если это строковое представление преобразовать обратно вBigDecimal, используя конструкторBigDecimal(String), то исходное значение будет восстановлено. - Строка, созданная для данного числа, всегда одинакова; она не зависит от локали. Это означает, что она может использоваться в качестве канонического строкового представления для обмена десятичными данными или в качестве ключа для таблицы хэширования и т. д. Локально-чувствительный формат и разбор чисел обрабатываются классом
NumberFormatи его подклассами. - Метод
toEngineeringString()может использоваться для представления чисел с показателями в инженерной записи, а методsetScaleможет использоваться для округленияBigDecimalдо заданного количества знаков после десятичной точки. - Используется отображение цифр в символы, предоставляемое
Character.forDigit.
- Overrides:
-
toStringв классеObject - Возвращает:
- строковое представление этого
BigDecimal. - См. также:
-
Character.forDigit(int, int),BigDecimal(java.lang.String)
toEngineeringString
public String toEngineeringString()
Возвращает строковое представление этого BigDecimal, используя инженерную запись, если нужен показатель степени.
Возвращает строку, которая представляет BigDecimal, как описано в методе toString(), за исключением того, что если используется экспоненциальная запись, показатель степени десятки корректируется до кратного трём (инженерная запись), таким образом, целая часть ненулевых значений будет находиться в диапазоне от 1 до 999. Если экспоненциальная запись используется для нулевых значений, используется десятичная точка и одна или две дробные нулевые цифры, чтобы сохранить масштаб нулевого значения. Обратите внимание, что, в отличие от вывода метода toString(), вывод этого метода не гарантирует восстановление той же пары [целое число, масштаб] этого BigDecimal, если строка вывода преобразуется обратно в BigDecimal с помощью конструктора строки . Результат этого метода удовлетворяет более слабому ограничению, всегда производя численный эквивалентный результат при применении конструктора строки к выводу метода.
- Возвращает:
- строковое представление этого
BigDecimal, используя инженерную запись, если нужен показатель степени. - С момента:
- 1.5
toPlainString
public String toPlainString()
Возвращает строковое представление этого BigDecimal без поля показателя степени. Для значений с положительным масштабом количество цифр справа от десятичной точки используется для обозначения масштаба. Для значений с нулевым или отрицательным масштабом результирующая строка генерируется так, как если бы значение было преобразовано в численно эквивалентное значение с нулевым масштабом и как если бы все хвостовые нули нулевого масштабного значения присутствовали в результате. Вся строка предваряется знаком минус '−' ('\u002D'), если неразмеренное значение меньше нуля. Знак не добавляется, если неразмеренное значение равно нулю или положительно. Обратите внимание, что если результат этого метода передаётся в конструктор строки , то обязательно восстанавливается только числовое значение этого BigDecimal; представление нового BigDecimal может иметь другой масштаб. В частности, если у этого BigDecimal есть отрицательный масштаб, строка, полученная в результате этого метода, будет иметь масштаб нуль при обработке конструктором строки. (Этот метод ведет себя аналогично методу toString в версиях 1.4 и ранее.)
- Возвращает:
- строковое представление этого
BigDecimalбез поля показателя степени. - С момента:
- 1.5
- См. также:
-
toString(),toEngineeringString()
toBigInteger
public BigInteger toBigInteger()
Преобразует это BigDecimal в BigInteger. Это преобразование аналогично преобразованию примитивного сужения из double в long, как определено в Спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена. Обратите внимание, что при этом преобразовании может быть потеряна информация о точности значения BigDecimal.
Чтобы при неточном преобразовании (то есть, если дробная часть отлична от нуля) было выброшено исключение, используйте метод toBigIntegerExact().
- Возвращает:
- это
BigDecimal, преобразованное вBigInteger.
toBigIntegerExact
public BigInteger toBigIntegerExact()
Преобразует это BigDecimal в BigInteger, проверяя потерю информации. Если у этого BigDecimal есть дробная часть, отличная от нуля, выбросится исключение.
- Возвращает:
- это
BigDecimal, преобразованное вBigInteger. - Выбрасывает:
-
ArithmeticException- если уthisесть дробная часть, отличная от нуля. - С момента:
- 1.5
longValue
public long longValue()
Преобразует это BigDecimal в long. Это преобразование аналогично преобразованию примитивного сужения из double в short, как определено в Спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена, и если полученное "BigInteger" слишком велико для размещения в long, возвращаются только младшие 64 бита. Обратите внимание, что при этом преобразовании может быть потеряна информация о величине и точности этого BigDecimal значения, а также может быть возвращён результат с противоположным знаком.
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 значения, а также может быть возвращён результат с противоположным знаком.
intValueExact
public int intValueExact()
Преобразует этот BigDecimal в int, проверяя на потерю информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за допустимый диапазон для результата типа int, то будет брошено исключение ArithmeticException.
- Возвращает:
- этот
BigDecimal, преобразованный вint. - Выбрасывает:
-
ArithmeticException- если уthisесть ненулевая дробная часть или он не помещается вint. - С:
- 1.5
shortValueExact
public short shortValueExact()
Преобразует этот BigDecimal в short, проверяя на потерю информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за допустимый диапазон для результата типа short, то будет брошено исключение ArithmeticException.
- Возвращает:
- этот
BigDecimal, преобразованный вshort. - Выбрасывает:
-
ArithmeticException- если уthisесть ненулевая дробная часть или он не помещается вshort. - С:
- 1.5
byteValueExact
public byte byteValueExact()
Преобразует этот BigDecimal в byte, проверяя на потерю информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за допустимый диапазон для результата типа byte, то будет брошено исключение ArithmeticException.
- Возвращает:
- этот
BigDecimal, преобразованный вbyte. - Выбрасывает:
-
ArithmeticException- если уthisесть ненулевая дробная часть или он не помещается вbyte. - С:
- 1.5
floatValue
public float floatValue()
Преобразует этот BigDecimal в float. Это преобразование аналогично преобразованию примитивного сужения из double в float, как определено в Спецификации языка Java™: если у этого BigDecimal слишком большое значение для представления в виде float, он будет преобразован в Float.NEGATIVE_INFINITY или Float.POSITIVE_INFINITY соответственно. Обратите внимание, что даже когда возвращаемое значение конечно, это преобразование может потерять информацию о точности значения BigDecimal.
- Определено в:
-
floatValueв классеNumber - Возвращает:
- этот
BigDecimal, преобразованный вfloat.
doubleValue
public double doubleValue()
Преобразует этот BigDecimal в double. Это преобразование аналогично преобразованию примитивного сужения из double в float, как определено в Спецификации языка Java™: если у этого BigDecimal слишком большое значение для представления в виде double, он будет преобразован в Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY соответственно. Обратите внимание, что даже когда возвращаемое значение конечно, это преобразование может потерять информацию о точности значения BigDecimal.
- Определено в:
-
doubleValueв классеNumber - Возвращает:
- этот
BigDecimal, преобразованный вdouble.
ulp
public BigDecimal ulp()
Возвращает размер ulp (единица в последнем разряде) этого BigDecimal. ULP ненулевого значения BigDecimal — это положительное расстояние между этим значением и следующим по величине значением с тем же количеством цифр. ULP нулевого значения численно равно 1 со масштабом this. Результат сохраняется с тем же масштабом, что и this, поэтому результат для нулевых и ненулевых значений равен [1,
this.scale()].
- Возвращает:
- размер ulp для
this - С:
- 1.5
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html