Класс BigDecimal.BigDecimal
final class BigDecimal(val bigDecimal: BigDecimal, val mc: MathContext) extends ScalaNumber with ScalaNumericConversions with Serializable with Ordered[BigDecimal]
BigDecimal представляет десятичные числа с плавающей точкой произвольной точности. По умолчанию точность приблизительно соответствует точности чисел с плавающей точкой IEEE 128 бит (34 десятичных знаков, HALF_EVEN режим округления). В пределах диапазона чисел IEEE binary128, BigDecimal будет согласовываться с BigInt как для равенства, так и для кодов хеширования (и будет согласовываться с примитивными типами тоже). За пределами этого диапазона — числа с более чем 4934 знаками при полном представлении — hashCode BigInt и BigDecimal могут отличаться из-за сложности эффективного вычисления как десятичного представления в BigDecimal, так и двоичного представления в BigInt.
При создании BigDecimal из Double или Float, необходимо проявлять осторожность, так как двоичное представление дробной части Double и Float нелегко преобразуется в десятичное представление. Доступны три явных схемы преобразования. BigDecimal.decimal преобразует число с плавающей точкой в десятичное текстовое представление и строит BigDecimal на основе этого. BigDecimal.binary расширит двоичную дробь до запрошенной или по умолчанию точности. BigDecimal.exact расширит двоичную дробь до полного числа знаков, тем самым, получив точное десятичное значение, соответствующее двоичной дробной части этого числа с плавающей точкой. BigDecimal равенство совпадает с десятичным разложением Double: BigDecimal.decimal(0.1) == 0.1. Обратите внимание, что, начиная с 0.1f != 0.1, это неверно для Float. Вместо этого 0.1f == BigDecimal.decimal((0.1f).toDouble).
Чтобы проверить, может ли число BigDecimal быть преобразовано в Double или Float и обратно без потери информации с помощью одного из этих методов, проверьте с isDecimalDouble, isBinaryDouble, или isExactDouble или соответствующими Float версиями. Обратите внимание, что BigInt's isValidDouble будет совпадать с isExactDouble, а не с isDecimalDouble, используемой по умолчанию.
BigDecimal использует десятичное представление двоичных чисел с плавающей точкой для определения равенства и кодов хеширования. Это дает разные ответы, чем преобразование между Long и Double значениями, где используется точная форма. Как всегда, поскольку числа с плавающей точкой — это потерное представление, рекомендуется проявлять осторожность, предполагая, что идентичность будет сохранена при нескольких преобразованиях.
BigDecimal поддерживает MathContext, который определяет округление, применяемое к некоторым вычислениям. В большинстве случаев значение BigDecimal также округляется до точности, указанной в MathContext. Чтобы создать BigDecimal с другой точностью, чем у его MathContext, используйте new BigDecimal(new java.math.BigDecimal(...), mc). Округление будет применено к тем математическим операциям, которые могут значительно изменить число знаков в полном представлении, а именно, умножению, делению и возведению в степень. MathContext левого аргумента всегда определяет степень округления, если таковое имеется, и является тем, что распространяется через арифметические операции, которые сами не применяют округление.
| Супертипы |
|---|
Конструкторы
Исходный код
def this(bigDecimal: BigDecimal)
Конкретные методы
Исходный код
Остаток от деления этого на то.
Исходный код
Умножение BigDecimal
Исходный код
Сложение BigDecimal
Исходный код
Вычитание BigDecimal
Исходный код
Деление BigDecimal
Исходный код
Деление и остаток — возвращает кортеж, содержащий результат divideToIntegralValue и остаток. Вычисление точное: округление не применяется.
Исходный код
def abs: BigDecimal
Возвращает абсолютное значение этого BigDecimal
Исходный код
Возвращает новый BigDecimal на основе заданного MathContext, округлённый при необходимости.
Исходный код
Преобразует этот BigDecimal в Byte. Если BigDecimal слишком велик для размещения в Byte, возвращаются только младшие 8 битов. Обратите внимание, что при этом преобразовании может быть потеряна информация о общем порядке величины значения BigDecimal, а также может быть возвращён результат с обратным знаком.
| Определяющие классы | ScalaNumericAnyConversions -> Number |
|---|
Исходный код
Преобразует этот BigDecimal в Char. Если BigDecimal слишком велик для размещения в Char, возвращаются только младшие 16 битов. Обратите внимание, что при этом преобразовании может быть потеряна информация о общем порядке величины значения BigDecimal, а также что оно всегда возвращает положительный результат.
Исходный код
Сравнивает этот BigDecimal со значением BigDecimal
Исходный код
def doubleValue: Double
Преобразует этот BigDecimal в Double. Если у этого BigDecimal слишком большая величина для представления как double, он будет преобразован в Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY соответственно.
Исходный код
Сравнивает этот BigDecimal со значением для равенства. Там, где Float и Double расходятся, BigDecimal будет согласоваться с Double значением
| Определяющие классы | Any |
|---|
Исходный код
Сравнивает этот BigDecimal со значением BigDecimal для равенства.
END_OF_DOCUMENT_MARKER
Source
def floatValue: Float
Преобразует этот BigDecimal в Float. Если у этого BigDecimal слишком большое значение для представления как float, оно будет преобразовано в Float.NEGATIVE_INFINITY или Float.POSITIVE_INFINITY соответственно.
Source
Возвращает хэш-код для этого BigDecimal. Обратите внимание, что это не просто использование hashCode базового объекта Java, поскольку мы сравниваем BigDecimal с compareTo, что делает 2 == 2.00, тогда как в Java эти значения не равны с разными hashCode. Эти хэш-коды согласуются с BigInt для целых чисел до ~4934 цифр (диапазон плавающей точки IEEE 128 бит). За пределами этого хэш-коды будут отличаться; это предотвращает явное представление формы BigInt для BigDecimal значений с большими экспонентами.
| Definition Classes | Any |
|---|
Source
Преобразует этот BigDecimal в Int. Если BigDecimal слишком большой для размещения в Int, возвращаются только младшие 32 бита. Обратите внимание, что при этом преобразовании может потеряться информация о величине значения BigDecimal, а также может быть возвращено значение с противоположным знаком.
Source
def isBinaryDouble: Boolean
Проверяет, содержит ли этот BigDecimal бинарное представление Double с точностью до заданной.
Source
def isBinaryFloat: Boolean
Проверяет, содержит ли этот BigDecimal бинарное представление Float с точностью до заданной.
Source
def isDecimalDouble: Boolean
Проверяет, содержит ли этот BigDecimal десятичное представление Double.
Source
def isDecimalFloat: Boolean
Проверяет, содержит ли этот BigDecimal десятичное представление Float.
Source
def isExactDouble: Boolean
Проверяет, содержит ли этот BigDecimal точное разложение бинарной дробной формы Double в систему счисления с основанием 10.
Source
def isExactFloat: Boolean
Проверяет, содержит ли этот BigDecimal точное разложение бинарной дробной формы Float в систему счисления с основанием 10.
Source
override def isValidByte: Boolean
Возвращает true если у этого BigDecimal нулевая дробная часть и он находится в диапазоне от scala.Byte MinValue до MaxValue, в противном случае возвращает false.
| Definition Classes | ScalaNumericAnyConversions |
|---|
Source
override def isValidChar: Boolean
Возвращает true если у этого BigDecimal нулевая дробная часть и он находится в диапазоне от scala.Char MinValue до MaxValue, в противном случае возвращает false.
| Definition Classes | ScalaNumericAnyConversions |
|---|
Source
override def isValidInt: Boolean
Возвращает true если у этого BigDecimal нулевая дробная часть и он находится в диапазоне от scala.Int MinValue до MaxValue, в противном случае возвращает false.
| Definition Classes | ScalaNumericAnyConversions |
|---|
Source
def isValidLong: Boolean
Source
override def isValidShort: Boolean
Возвращает true если у этого BigDecimal нулевая дробная часть и он находится в диапазоне от scala.Short MinValue до MaxValue, в противном случае возвращает false.
| Definition Classes | ScalaNumericAnyConversions |
|---|
Source
| Returns | True, если у этого числа нет дробной части, иначе False. |
|---|
Source
Преобразует этот BigDecimal в Long. Если BigDecimal слишком большой для размещения в Long, возвращаются только младшие 64 бита. Обратите внимание, что при этом преобразовании может потеряться информация о величине значения BigDecimal, а также может быть возвращено значение с противоположным знаком.
Source
Возвращает максимальное значение между этим и that, или this, если они равны.
Source
Возвращает минимальное значение между этим и that, или this, если они равны.
Source
Возвращает BigDecimal, значение которого равно этому в степени n.
Source
Возвращает точность этого BigDecimal.
Source
Деление с получением целого значения.
Source
Остаток от деления этого на that.
Source
Возвращает BigDecimal, округлённый в соответствии с настройками MathContext, но сохраняя собственный MathContext для будущих операций.
Source
def rounded: BigDecimal
Возвращает округлённый BigDecimal в соответствии с собственными MathContext настройками.
Source
Возвращает масштаб этого BigDecimal.
Source
Возвращает BigDecimal, масштаб которой равен указанному значению, и чьё значение численно равно значению этого BigDecimal.
Source
Source
override def shortValue: Short
Преобразует этот BigDecimal в Short. Если BigDecimal слишком большой, чтобы поместиться в Short, возвращаются только младшие 16 бит. Обратите внимание, что при этом преобразовании может быть потеряна информация о величине значения BigDecimal, а также может быть возвращён результат с противоположным знаком.
| Definition Classes | ScalaNumericAnyConversions -> Number |
|---|
Source
def sign: BigDecimal
Возвращает знак этого BigDecimal; -1, если он меньше 0, +1, если он больше 0, 0, если он равен 0.
Source
Возвращает знак этого BigDecimal; -1, если он меньше 0, +1, если он больше 0, 0, если он равен 0.
Source
Как until, но включающий конечное значение.
Source
Как until, но включающий конечное значение.
Source
Преобразует этот BigDecimal в scala.BigInt.
Source
Преобразует этот BigDecimal в scala.BigInt, если это можно сделать без потерь, возвращая Some(BigInt) или None.
Source
def toByteExact: Byte
Преобразует этот BigDecimal в scala.Byte, проверяя потерю информации. Если этот BigDecimal имеет ненулевую дробную часть или выходит за допустимый диапазон для результата scala.Byte, то выбрасывается java.lang.ArithmeticException.
Source
def toIntExact: Int
Преобразует этот BigDecimal в scala.Int, проверяя потерю информации. Если этот BigDecimal имеет ненулевую дробную часть или выходит за допустимый диапазон для результата scala.Int, то выбрасывается java.lang.ArithmeticException.
Source
def toLongExact: Long
Преобразует этот BigDecimal в scala.Long, проверяя потерю информации. Если этот BigDecimal имеет ненулевую дробную часть или выходит за допустимый диапазон для результата scala.Long, то выбрасывается java.lang.ArithmeticException.
Source
def toShortExact: Short
Преобразует этот BigDecimal в scala.Short, проверяя потерю информации. Если этот BigDecimal имеет ненулевую дробную часть или выходит за допустимый диапазон для результата scala.Short, то выбрасывается java.lang.ArithmeticException.
Source
Возвращает строковое представление этого BigDecimal в десятичном формате.
| Definition Classes | Any |
|---|
Source
def ulp: BigDecimal
Возвращает размер ulp (единицы в последнем разряде) этого BigDecimal.
Source
def unary_-: BigDecimal
Возвращает BigDecimal, значение которого является отрицанием значения этого BigDecimal.
Source
def underlying: Object
Source
Создаёт частично сконструированный NumericRange[BigDecimal] в диапазоне [start;end), где start - целевое значение BigDecimal. Шаг должен быть предоставлен через метод "by" возвращаемого объекта для получения полностью сконструированного диапазона. Например:
val partial = BigDecimal(1.0) to 2.0 // not usable yet val range = partial by 0.01 // now a NumericRange val range2 = BigDecimal(0) to 1.0 by 0.01 // all at once of course is fine too
| Value parameters |
|
|---|---|
| Returns | Частично сконструированный NumericRange |
Source
То же, что и одноаргументный until, но создаёт диапазон сразу.
Inherited methods
Source
Возвращает true, если this меньше that
| Inherited from | Ordered |
|---|
Source
Возвращает true, если this меньше или равно that.
| Inherited from | Ordered |
|---|
Source
Возвращает true, если this больше that.
| Inherited from | Ordered |
|---|
Source
Возвращает true, если this больше или равно that.
| Inherited from | Ordered |
|---|
Source
Результат сравнения this с операндом that.
| Унаследовано от | Ordered |
|---|
Источник
Возвращает значение этого объекта как scala.Byte. Это может включать округление или усечение.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта как scala.Char. Это может включать округление или усечение.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта как scala.Double. Это может включать округление или усечение.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта как scala.Float. Это может включать округление или усечение.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта как scala.Int. Это может включать округление или усечение.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта как scala.Long. Это может включать округление или усечение.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта как scala.Short. Это может включать округление или усечение.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
Должен вызываться только после исключения всех известных типов, не являющихся примитивами. Этот метод не будет перенаправлять в другое место после проверки на примитивы, чтобы избежать бесконечной рекурсии между equals и этим по неизвестным вариантам «Number».
Кроме того, это должно вызываться только в том случае, если числовой тип рад преобразовываться в Long, Float и Double. Например, если сюда отправляется BigInt, намного больший, чем диапазон Long, он заявит о равенстве с любым Long, оставшимся в его нижних 64 битах. Или BigDecimal с большей точностью, чем может вместить Double: то же самое. Нет способа, учитывая доступный здесь интерфейс, предотвратить эту ошибку.
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Источник
protected def unifiedPrimitiveHashcode: Int
| Унаследовано от | ScalaNumericAnyConversions |
|---|
Конкретные поля
Источник
val bigDecimal: BigDecimal
Источник
val mc: MathContext
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.2.0/scala/math/BigDecimal.html