Класс 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(масштаб_уменьшаемого, масштаб_вычитаемого) |
| Умножение | масштаб_множителя + масштаб_множимого |
| Деление | масштаб_делимого - масштаб_делителя |
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.
Примечание: следует проявлять осторожность, если объекты BigDecimal используются в качестве ключей в SortedMap или элементами в SortedSet, поскольку естественный порядок объектов BigDecimal является несовместимым с методом equals. См. Comparable, SortedMap или SortedSet для получения дополнительной информации.
Все методы и конструкторы этого класса выбрасывают NullPointerException при передаче ссылки на объект null в качестве любого параметра.
- См. также:
-
BigInteger,MathContext,RoundingMode,SortedMap,SortedSet, Сериализованная форма
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static BigDecimal |
ONE Значение 1 со масштабом 0. |
static int |
ROUND_CEILING Режим округления к положительной бесконечности. |
static int |
ROUND_DOWN Режим округления к нулю. |
static int |
ROUND_FLOOR Режим округления к отрицательной бесконечности. |
static int |
ROUND_HALF_DOWN Режим округления к ближайшему соседу, за исключением случаев, когда оба соседа равноудалены, в таком случае округляется вниз. |
static int |
ROUND_HALF_EVEN Режим округления к ближайшему соседу, за исключением случаев, когда оба соседа равноудалены, в таком случае округляется к четному соседу. |
static int |
ROUND_HALF_UP Режим округления к ближайшему соседу, за исключением случаев, когда оба соседа равноудалены, в таком случае округляется вверх. |
static int |
ROUND_UNNECESSARY Режим округления, гарантирующий точный результат операции, поэтому округление не требуется. |
static int |
ROUND_UP Режим округления от нуля. |
static BigDecimal |
TEN Значение 10 со масштабом 0. |
static BigDecimal |
ZERO Значение 0 со масштабом 0. |
Конструкторы
| Конструктор и описание |
|---|
BigDecimal(BigInteger val) Преобразует |
BigDecimal(BigInteger unscaledVal,
int scale) Преобразует значение |
BigDecimal(BigInteger unscaledVal,
int scale,
MathContext mc) Преобразует значение |
BigDecimal(BigInteger val,
MathContext mc) Преобразует |
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 |
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) Возвращает |
BigDecimal |
divide(BigDecimal divisor,
int scale,
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) Возвращает |
BigDecimal |
setScale(int newScale,
RoundingMode roundingMode) Возвращает |
short |
shortValueExact() Преобразует этот |
int |
signum() Возвращает функцию знака этого |
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.
- С:
- 1.5
ONE
public static final BigDecimal ONE
Значение 1 со масштабом 0.
- С:
- 1.5
TEN
public static final BigDecimal TEN
Значение 10 со масштабом 0.
- С:
- 1.5
ROUND_UP
public static final int ROUND_UP
Режим округления от нуля. Всегда увеличивает цифру перед не нулевой отбрасываемой дробной частью. Обратите внимание, что этот режим округления никогда не уменьшает величину вычисленного значения.
- См. также:
- Постоянные значения полей
ROUND_DOWN
public static final int ROUND_DOWN
Режим округления к нулю. Никогда не увеличивает цифру перед отбрасываемой дробной частью (т. е. усечение). Обратите внимание, что этот режим округления никогда не увеличивает величину вычисленного значения.
- См. также:
- Постоянные значения полей
ROUND_CEILING
public static final int ROUND_CEILING
Режим округления до положительной бесконечности. Если BigDecimal положительное, ведет себя как для ROUND_UP; если отрицательное, ведет себя как для ROUND_DOWN. Обратите внимание, что этот режим округления никогда не уменьшает вычисленное значение.
- См. также:
- Постоянные значения полей
ROUND_FLOOR
public static final int ROUND_FLOOR
Режим округления до отрицательной бесконечности. Если BigDecimal положительное, ведет себя как для ROUND_DOWN; если отрицательное, ведет себя как для ROUND_UP. Обратите внимание, что этот режим округления никогда не увеличивает вычисленное значение.
- См. также:
- Постоянные значения полей
ROUND_HALF_UP
public static final int ROUND_HALF_UP
Режим округления к «ближайшему соседу», если оба соседа равноудалены, то округляет вверх. Ведет себя как для ROUND_UP если отброшенная дробная часть ≥ 0,5; в противном случае ведет себя как для ROUND_DOWN. Обратите внимание, что это режим округления, которому большинство из нас учили в начальной школе.
- См. также:
- Постоянные значения полей
ROUND_HALF_DOWN
public static final int ROUND_HALF_DOWN
Режим округления к «ближайшему соседу», если оба соседа равноудалены, то округляет вниз. Ведет себя как для ROUND_UP если отброшенная дробная часть > 0,5; в противном случае ведет себя как для ROUND_DOWN.
- См. также:
- Постоянные значения полей
ROUND_HALF_EVEN
public static final int ROUND_HALF_EVEN
Режим округления к «ближайшему соседу», если оба соседа равноудалены, то округляет к ближайшему четному соседу. Ведет себя как для ROUND_HALF_UP если цифра слева от отброшенной дробной части нечетная; ведет себя как для ROUND_HALF_DOWN если четная. Обратите внимание, что этот режим округления сводит к минимуму кумулятивную ошибку при многократном применении в последовательности вычислений.
- См. также:
- Постоянные значения полей
ROUND_UNNECESSARY
public static final int ROUND_UNNECESSARY
Режим округления, утверждающий, что запрашиваемая операция имеет точный результат, поэтому округление не требуется. Если этот режим округления указан для операции, которая дает неточный результат, выбрасывается ArithmeticException.
- См. также:
- Постоянные значения полей
Конструкторы
BigDecimal
public BigDecimal(char[] in,
int offset,
int len) Преобразует строковое представление BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), позволяя при этом указать подмассив.
Обратите внимание, что если последовательность символов уже доступна в массиве символов, использование этого конструктора быстрее, чем преобразование массива char в строку и использование конструктора BigDecimal(String).
- Параметры:
-
in- массив символов, являющийся источником символов. -
offset- первый символ в массиве для проверки. -
len- количество символов для рассмотрения. - Исключения:
-
NumberFormatException- еслиinне является допустимым представлениемBigDecimalили указанный подмассив не полностью находится внутриin. - С:
- 1.5
BigDecimal
public BigDecimal(char[] in,
int offset,
int len,
MathContext mc) Преобразует строковое представление BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), позволяя при этом указать подмассив и выполняя округление согласно настройкам контекста.
Обратите внимание, что если последовательность символов уже доступна в массиве символов, использование этого конструктора быстрее, чем преобразование массива char в строку и использование конструктора BigDecimal(String).
- Параметры:
-
in- массив символов, являющийся источником символов. -
offset- первый символ в массиве для проверки. -
len- количество символов для рассмотрения. -
mc- используемый контекст. - Исключения:
-
ArithmeticException- если результат неточный, но режим округленияUNNECESSARY. -
NumberFormatException- еслиinне является допустимым представлениемBigDecimalили указанный подмассив не полностью находится внутриin. - С:
- 1.5
BigDecimal
public BigDecimal(char[] in)
Преобразует строковое представление BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String).
Обратите внимание, что если последовательность символов уже доступна как массив символов, использование этого конструктора быстрее, чем преобразование массива char в строку и использование конструктора BigDecimal(String).
- Параметры:
-
in- массив символов, являющийся источником символов. - Исключения:
-
NumberFormatException- еслиinне является допустимым представлениемBigDecimal. - С:
- 1.5
BigDecimal
public BigDecimal(char[] in,
MathContext mc) Преобразует строковое представление BigDecimal в BigDecimal, принимая ту же последовательность символов, что и конструктор BigDecimal(String), и выполняя округление согласно настройкам контекста.
Обратите внимание, что если последовательность символов уже доступна как массив символов, использование этого конструктора быстрее, чем преобразование массива char в строку и использование конструктора BigDecimal(String).
- Параметры:
-
in- массив символов, являющийся источником символов. -
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]
Примечание: Для значений, отличных от float и double NaN и ±Infinity, этот конструктор совместим со значениями, возвращаемыми Float.toString(float) и Double.toString(double). Это обычно предпочтительный способ преобразования float или double в BigDecimal, так как он не страдает от непредсказуемости конструктора BigDecimal(double).
- Параметры:
-
val- Строковое представлениеBigDecimal. - Исключения:
-
NumberFormatException- еслиvalне является допустимым представлениемBigDecimal.
BigDecimal
public BigDecimal(String val,
MathContext mc) Преобразует строковое представление BigDecimal в BigDecimal, принимая те же строки, что и конструктор BigDecimal(String), с округлением в соответствии с настройками контекста.
- Параметры:
-
val- строковое представлениеBigDecimal. -
mc- контекст, который необходимо использовать. - Исключения:
-
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(или, в конечном счёте, как двоичная дробь конечной длины). Таким образом, передаваемое в конструктор значение не равно 0.1, несмотря на видимость. - Конструктор
String, с другой стороны, идеально предсказуем: записьnew BigDecimal("0.1")создаётBigDecimal, который точно равен 0.1, как и ожидалось. Поэтому обычно рекомендуется использовать конструкторStringвместо этого. - Если
doubleдолжен использоваться как источник дляBigDecimal, обратите внимание, что этот конструктор обеспечивает точное преобразование; он не даёт тот же результат, что и преобразованиеdoubleвStringс помощью методаDouble.toString(double), а затем использование конструктораBigDecimal(String). Чтобы получить этот результат, используйте методstaticvalueOf(double).
- Параметры:
-
val- Значение с плавающей точкой, подлежащее преобразованию в BigDecimal. - Исключения:
-
NumberFormatException- еслиvalбесконечен или NaN.
BigDecimal
public BigDecimal(double val,
MathContext mc) Преобразует double в BigDecimal, с округлением в соответствии с настройками контекста. Масштаб BigDecimal - наименьшее значение, при котором (10scale × val) является целым числом.
Результаты этого конструктора могут быть несколько непредсказуемыми, и его использование обычно не рекомендуется; см. примечания к конструктору BigDecimal(double).
- Параметры:
-
val- значение с плавающей точкой, подлежащее преобразованию в 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) Преобразует long без масштаба и int масштаб в BigDecimal . Этот «статический фабричный метод» предоставляется вместо конструктора (long, int) для возможности повторного использования часто используемых значений BigDecimal.
- Параметры:
-
unscaledVal- значение без масштабаBigDecimal. -
scale- масштабBigDecimal. - Возвращает:
BigDecimal, значение которого(unscaledVal × 10-scale).
valueOf
public static BigDecimal valueOf(long val)
Преобразует long в BigDecimal с масштабом ноль. Этот «статический фабричный метод» предоставляется вместо конструктора (long) для возможности повторного использования часто используемых значений BigDecimal.
- Параметры:
-
val- значениеBigDecimal. - Возвращает:
BigDecimal, значение которогоval.
valueOf
public static BigDecimal valueOf(double val)
Преобразует double в BigDecimal, используя каноническое строковое представление double , предоставленное методом Double.toString(double).
Примечание: Обычно это предпочтительный способ преобразования double (или float) в BigDecimal, поскольку возвращаемое значение равно результату построения BigDecimal из результата использования Double.toString(double).
- Параметры:
-
val-doubleдля преобразования вBigDecimal. - Возвращает:
BigDecimal, значение которого равно или приблизительно равно значениюval.- Исключения:
-
NumberFormatException- еслиvalбесконечен или NaN. - С:
- 1.5
add
public BigDecimal add(BigDecimal augend)
Возвращает BigDecimal, значение которого (this +
augend), и масштаб max(this.scale(),
augend.scale()).
- Параметры:
-
augend- значение, которое нужно добавить к этомуBigDecimal. - Возвращает:
this + augend
add
public BigDecimal add(BigDecimal augend,
MathContext mc) Возвращает BigDecimal, значение которого (this + augend), с округлением в соответствии с настройками контекста. Если любое число равно нулю, и настройка точности отлична от нуля, то другое число, округлённое при необходимости, используется в качестве результата.
- Параметры:
-
augend- значение, которое нужно добавить к этомуBigDecimal. -
mc- используемый контекст. - Возвращает:
-
this + augend, округлённое по необходимости. - Исключения:
-
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
public BigDecimal divide(BigDecimal divisor,
int scale,
int roundingMode) Возвращает BigDecimal, значение которого (this /
divisor), и масштаб, как указано. Если для генерации результата с заданным масштабом необходимо выполнить округление, применяется указанный режим округления.
Вместо этого устаревшего метода следует использовать новый метод divide(BigDecimal, int, RoundingMode).
- Параметры:
-
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
public BigDecimal divide(BigDecimal divisor,
int roundingMode) Возвращает BigDecimal, значение которого (this /
divisor), и масштаб this.scale(). Если для генерации результата с заданным масштабом необходимо выполнить округление, применяется указанный режим округления.
Вместо этого устаревшего метода следует использовать новый метод divide(BigDecimal, RoundingMode).
- Параметры:
-
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)). Обратите внимание, что это не операция по модулю (результат может быть отрицательным).
- Параметры:
-
divisor- значение, на которое следует разделить данныйBigDecimal. - Возвращает:
-
this % divisor. - Выбрасывает:
-
ArithmeticException- еслиdivisor==0 - С:
- 1.5
remainder
public BigDecimal remainder(BigDecimal divisor,
MathContext mc) Возвращает BigDecimal, значение которого равно (this %
divisor), с округлением в соответствии с настройками контекста. Настройки MathContext влияют на неявное деление, используемое для вычисления остатка. Само вычисление остатка по определению точно. Поэтому остаток может содержать более mc.getPrecision() цифр.
Остаток вычисляется по формуле this.subtract(this.divideToIntegralValue(divisor,
mc).multiply(divisor)). Обратите внимание, что это не операция по модулю (результат может быть отрицательным).
- Параметры:
-
divisor- значение, на которое следует разделить данныйBigDecimal. -
mc- контекст для использования. - Возвращает:
-
this % divisor, округлённый при необходимости. - Выбрасывает:
-
ArithmeticException- еслиdivisor==0 -
ArithmeticException- если результат неточен, но режим округленияUNNECESSARY, илиmc.precision> 0 и результатthis.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)
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), округлённый по необходимости. - Исключения:
-
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 на соответствующую степень десяти для сохранения его общего значения. Если масштаб уменьшается в ходе операции, неусечённое значение должно делиться (а не умножаться), и значение может измениться; в этом случае применяется указанный режим округления к делению.
Обратите внимание, что поскольку объекты BigDecimal неизменяемы, вызовы этого метода не приводят к изменению исходного объекта, в отличие от обычной практики, когда методы с именами setX изменяют поле X. Вместо этого setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым.
- Параметры:
-
newScale- масштаб возвращаемогоBigDecimalзначения. -
roundingMode- режим округления для применения. - Возвращает:
BigDecimalс заданным масштабом, и неусечённым значением, определяемым умножением или делением неусечённого значения этогоBigDecimalна соответствующую степень десяти для сохранения его общего значения.- Исключения:
-
ArithmeticException- еслиroundingMode==UNNECESSARYи указанная операция масштабирования потребуют округления. - С:
- 1.5
- См. также:
RoundingMode
setScale
public BigDecimal setScale(int newScale,
int roundingMode) Возвращает BigDecimal с заданным масштабом, и неусечённым значением, определяемым умножением или делением неусечённого значения этого BigDecimal на соответствующую степень десяти для сохранения его общего значения. Если масштаб уменьшается в ходе операции, неусечённое значение должно делиться (а не умножаться), и значение может измениться; в этом случае применяется указанный режим округления к делению.
Обратите внимание, что поскольку объекты BigDecimal неизменяемы, вызовы этого метода не приводят к изменению исходного объекта, в отличие от обычной практики, когда методы с именами setX изменяют поле X. Вместо этого setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть новым.
Следует использовать новый метод setScale(int, RoundingMode) вместо этого устаревшего метода.
- Параметры:
-
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, но экономит вызывающему усилия по указанию режима округления в случаях, когда он не имеет значения.
Обратите внимание, что поскольку объекты 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- число разрядов для сдвига десятичной точки влево. - Возвращает:
- 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)
Возвращает BigDecimal, численное значение которого равно (this * 10n). Масштаб результата - (this.scale() - n).
- Параметры:
-
n- показатель степени десяти, на который нужно умножить - Возвращает:
- a BigDecimal, численное значение которого равно (
this* 10n) - Выбрасывает:
-
ArithmeticException- если масштаб будет находиться вне диапазона 32-битного целого числа. - Since:
- 1.5
stripTrailingZeros
public BigDecimal stripTrailingZeros()
Возвращает BigDecimal, численно равное этому, но с удалёнными хвостовыми нулями из представления. Например, удаление хвостовых нулей из значения BigDecimal 600.0, которое имеет компоненты [BigInteger, scale], равные [6000, 1], даёт 6E2, с компонентами [BigInteger, scale], равными [6, -2]. Если этот BigDecimal численно равен нулю, то возвращается BigDecimal.ZERO.
- Возвращает:
- численно равное
BigDecimalс удалёнными хвостовыми нулями. - Since:
- 1.5
compareTo
public int compareTo(BigDecimal val)
Сравнивает этот BigDecimal с указанным BigDecimal. Два объекта BigDecimal, равные по значению, но имеющие разные масштабы (например, 2.0 и 2.00), считаются равными этим методом. Этот метод предоставляется вместо отдельных методов для каждого из шести булевых операторов сравнения (<, ==, >, >=, !=, <=). Предлагаемый идиоматический способ выполнения этих сравнений: (x.compareTo(y) <op> 0), где <op> — один из шести операторов сравнения.
- Specified by:
-
compareToв интерфейсеComparable<BigDecimal> - Параметры:
-
val-BigDecimal, с которым сравнивается этотBigDecimal. - Возвращает:
- -1, 0 или 1, в зависимости от того, является ли этот
BigDecimalчисленно меньше, равно или большеval.
equals
public boolean equals(Object x)
Сравнивает этот BigDecimal с указанным Object на равенство. В отличие от compareTo, этот метод считает два объекта BigDecimal равными только в том случае, если они равны по значению и масштабу (следовательно, 2.0 не равно 2.00 при сравнении этим методом).
- Overrides:
-
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), обычно будут отличаться хэш-коды.
- Overrides:
-
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), то исходное значение будет восстановлено. - Строка, созданная для данного числа, всегда одинакова; она не зависит от региональных настроек. Это означает, что она может использоваться в качестве канонического строкового представления для обмена десятичными данными или в качестве ключа для Hashtable и т. д. Регионально-зависимые форматы и анализ чисел обрабатываются классом
NumberFormatи его подклассами. - Метод
toEngineeringString()может быть использован для представления чисел с показателями степени в инженерной записи, а методsetScaleможет быть использован для округленияBigDecimalтак, чтобы у него было известное количество цифр после десятичной точки. - Используется отображение цифр в символы, заданное
Character.forDigit.
- Overrides:
-
toStringв классеObject - Returns:
- строковое представление этого
BigDecimal. - См. также:
-
Character.forDigit(int, int),BigDecimal(java.lang.String)
toEngineeringString
public String toEngineeringString()
Возвращает строковое представление этого BigDecimal, используя инженерную нотацию, если требуется показатель степени.
Возвращает строку, представляющую BigDecimal как описано в методе toString(), за исключением того, что, если используется экспоненциальная нотация, показатель степени десяти изменяется на кратное трём (инженерная нотация), так что целая часть ненулевых значений будет находиться в диапазоне от 1 до 999. Если для нулевых значений используется экспоненциальная нотация, используется десятичная точка и одна или две дробные нулевые цифры, чтобы сохранить разряд нулевого значения. Обратите внимание, что в отличие от вывода метода toString(), вывод этого метода не гарантирует восстановление той же пары [целое число, разряд] этого BigDecimal, если строка вывода преобразуется обратно в BigDecimal с помощью конструктора строк. Результат этого метода удовлетворяет более слабому ограничению, всегда генерируя численно равный результат при применении конструктора строк к выводу метода.
- Returns:
- строковое представление этого
BigDecimal, используя инженерную нотацию, если требуется показатель степени. - Since:
- 1.5
toPlainString
public String toPlainString()
Возвращает строковое представление этого BigDecimal без поля показателя степени. Для значений с положительным разрядом количество цифр справа от десятичной точки используется для указания разряда. Для значений с нулевым или отрицательным разрядом результирующая строка генерируется так, как если бы значение было преобразовано в численно равное значение с нулевым разрядом и как если бы все хвостовые нули значения с нулевым разрядом были присутствующими в результате. Вся строка предваряется знаком минус '-' ('\u002D') , если значение без знака меньше нуля. Если значение без знака равно нулю или положительно, знак не предваряется. Обратите внимание, что если результат этого метода передаётся в конструктор строк конструктор строк, то будет восстановлено только численное значение этого BigDecimal; представление нового BigDecimal может иметь другой разряд. В частности, если у этого BigDecimal отрицательный разряд, строка, полученная в результате этого метода, будет иметь разряд ноль при обработке конструктором строк. (Этот метод работает аналогично методу toString в версиях 1.4 и более ранних).
- Returns:
- строковое представление этого
BigDecimalбез поля показателя степени. - Since:
- 1.5
- См. также:
-
toString(),toEngineeringString()
toBigInteger
public BigInteger toBigInteger()
Преобразует этот BigDecimal в BigInteger. Это преобразование аналогично *преобразованию примитивных типов сужения* от double к long, как определено в разделе 5.1.3 спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена. Обратите внимание, что при этом преобразовании может быть потеряна информация о точности значения BigDecimal.
Чтобы бросить исключение, если преобразование неточно (то есть, если отбрасывается ненулевая дробная часть), используйте метод toBigIntegerExact().
- Returns:
- этот
BigDecimalпреобразован вBigInteger.
toBigIntegerExact
public BigInteger toBigIntegerExact()
Преобразует этот BigDecimal в BigInteger, проверяя наличие потерь информации. Бросается исключение, если у этого BigDecimal есть ненулевая дробная часть.
- Returns:
- этот
BigDecimalпреобразован вBigInteger. - Throws:
-
ArithmeticException- если уthisесть ненулевая дробная часть. - Since:
- 1.5
longValue
public long longValue()
Преобразует этот BigDecimal в long. Это преобразование аналогично *преобразованию примитивных типов сужения* от double к short, как определено в разделе 5.1.3 спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена, и если полученное «BigInteger» слишком велико, чтобы поместиться в long, возвращаются только младшие 64 бита. Обратите внимание, что при этом преобразовании могут быть потеряны данные о целом масштабе и точности значения BigDecimal , а также может быть возвращён результат с противоположным знаком.
longValueExact
public long longValueExact()
Преобразует этот BigDecimal в long, проверяя наличие потерь информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за возможный диапазон для результата long, выбрасывается ArithmeticException.
- Returns:
- этот
BigDecimalпреобразован вlong. - Throws:
-
ArithmeticException- если уthisесть ненулевая дробная часть или он не помещается вlong. - Since:
- 1.5
intValue
public int intValue()
Преобразует этот BigDecimal в int. Это преобразование аналогично *преобразованию примитивных типов сужения* от double к short, как определено в разделе 5.1.3 спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена, и если полученное «BigInteger» слишком велико, чтобы поместиться в int, возвращаются только младшие 32 бита. Обратите внимание, что при этом преобразовании могут быть потеряны данные о целом масштабе и точности значения BigDecimal , а также может быть возвращён результат с противоположным знаком.
intValueExact
public int intValueExact()
Преобразует этот BigDecimal в int, проверяя наличие потерь информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за возможный диапазон для результата int, выбрасывается ArithmeticException.
- Returns:
- этот
BigDecimalпреобразован вint. - Throws:
-
ArithmeticException- если уthisесть ненулевая дробная часть или он не помещается вint. - Since:
- 1.5
shortValueExact
public short shortValueExact()
Преобразует этот BigDecimal в short, проверяя наличие потерь информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за возможный диапазон для результата short, выбрасывается ArithmeticException.
- Returns:
- этот
BigDecimalпреобразован вshort. - Throws:
-
ArithmeticException- если уthisесть ненулевая дробная часть или он не помещается вshort. - Since:
- 1.5
byteValueExact
public byte byteValueExact()
Преобразует этот BigDecimal в byte, проверяя наличие потерь информации. Если у этого BigDecimal есть ненулевая дробная часть или он выходит за возможный диапазон для результата byte, выбрасывается ArithmeticException.
- Returns:
- этот
BigDecimalпреобразован вbyte. - Throws:
-
ArithmeticException- если уthisесть ненулевая дробная часть или он не помещается вbyte. - Since:
- 1.5
floatValue
public float floatValue()
Преобразует этот BigDecimal в float. Это преобразование аналогично *преобразованию примитивных типов сужения* от double к float, как определено в разделе 5.1.3 спецификации языка Java™: если у этого BigDecimal слишком большое значение, чтобы представить его как float, он будет преобразован в Float.NEGATIVE_INFINITY или Float.POSITIVE_INFINITY соответственно. Обратите внимание, что даже когда возвращаемое значение конечно, при этом преобразовании может быть потеряна информация о точности значения BigDecimal.
- Specified by:
-
floatValueв классеNumber - Returns:
- этот
BigDecimalпреобразован вfloat.
doubleValue
public double doubleValue()
Преобразует этот BigDecimal в double. Это преобразование аналогично *преобразованию примитивных типов сужения* от double к float, как определено в разделе 5.1.3 спецификации языка Java™: если у этого BigDecimal слишком большое значение, чтобы представить его как double, он будет преобразован в Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY соответственно. Обратите внимание, что даже когда возвращаемое значение конечно, при этом преобразовании может быть потеряна информация о точности значения BigDecimal.
- Specified by:
-
doubleValueв классеNumber - Returns:
- этот
BigDecimalпреобразован вdouble.
ulp
public BigDecimal ulp()
Возвращает размер ulp (единица в последнем разряде) для данного BigDecimal. ULP ненулевого BigDecimal значения — это положительное расстояние между этим значением и 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.