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