Spec-Zone.ru › Scala 3.2

Класс 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 левого аргумента всегда определяет степень округления, если таковое имеется, и является тем, что распространяется через арифметические операции, которые сами не применяют округление.

Супертипы
Тракт Ordered[BigDecimal]
Тракт Comparable[BigDecimal]
Тракт ScalaNumericConversions
Тракт ScalaNumericAnyConversions
Класс ScalaNumber
Класс Number
Тракт Serializable
Класс Object
Тракт Matchable
Класс Any

Конструкторы

Исходный код
def this(bigDecimal: BigDecimal)

Конкретные методы

Исходный код
def %(that: BigDecimal): BigDecimal

Остаток от деления этого на то.

Исходный код
def *(that: BigDecimal): BigDecimal

Умножение BigDecimal

Исходный код
def +(that: BigDecimal): BigDecimal

Сложение BigDecimal

Исходный код
def -(that: BigDecimal): BigDecimal

Вычитание BigDecimal

Исходный код
def /(that: BigDecimal): BigDecimal

Деление BigDecimal

Исходный код
def /%(that: BigDecimal): (BigDecimal, BigDecimal)

Деление и остаток — возвращает кортеж, содержащий результат divideToIntegralValue и остаток. Вычисление точное: округление не применяется.

Исходный код
def abs: BigDecimal

Возвращает абсолютное значение этого BigDecimal

Исходный код
def apply(mc: MathContext): BigDecimal

Возвращает новый BigDecimal на основе заданного MathContext, округлённый при необходимости.

Исходный код
override def byteValue: Byte

Преобразует этот BigDecimal в Byte. Если BigDecimal слишком велик для размещения в Byte, возвращаются только младшие 8 битов. Обратите внимание, что при этом преобразовании может быть потеряна информация о общем порядке величины значения BigDecimal, а также может быть возвращён результат с обратным знаком.

Определяющие классы ScalaNumericAnyConversions -> Number

Исходный код
def charValue: Char

Преобразует этот BigDecimal в Char. Если BigDecimal слишком велик для размещения в Char, возвращаются только младшие 16 битов. Обратите внимание, что при этом преобразовании может быть потеряна информация о общем порядке величины значения BigDecimal, а также что оно всегда возвращает положительный результат.

Исходный код
def compare(that: BigDecimal): Int

Сравнивает этот BigDecimal со значением BigDecimal

Исходный код
def doubleValue: Double

Преобразует этот BigDecimal в Double. Если у этого BigDecimal слишком большая величина для представления как double, он будет преобразован в Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY соответственно.

Исходный код
override def equals(that: Any): Boolean

Сравнивает этот BigDecimal со значением для равенства. Там, где Float и Double расходятся, BigDecimal будет согласоваться с Double значением

Определяющие классы Any

Исходный код
def equals(that: BigDecimal): Boolean

Сравнивает этот BigDecimal со значением BigDecimal для равенства.

END_OF_DOCUMENT_MARKER

Source
def floatValue: Float

Преобразует этот BigDecimal в Float. Если у этого BigDecimal слишком большое значение для представления как float, оно будет преобразовано в Float.NEGATIVE_INFINITY или Float.POSITIVE_INFINITY соответственно.

Source
override def hashCode(): Int

Возвращает хэш-код для этого BigDecimal. Обратите внимание, что это не просто использование hashCode базового объекта Java, поскольку мы сравниваем BigDecimal с compareTo, что делает 2 == 2.00, тогда как в Java эти значения не равны с разными hashCode. Эти хэш-коды согласуются с BigInt для целых чисел до ~4934 цифр (диапазон плавающей точки IEEE 128 бит). За пределами этого хэш-коды будут отличаться; это предотвращает явное представление формы BigInt для BigDecimal значений с большими экспонентами.

Definition Classes Any

Source
def intValue: Int

Преобразует этот 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
def isWhole: Boolean

Returns

True, если у этого числа нет дробной части, иначе False.

Source
def longValue: Long

Преобразует этот BigDecimal в Long. Если BigDecimal слишком большой для размещения в Long, возвращаются только младшие 64 бита. Обратите внимание, что при этом преобразовании может потеряться информация о величине значения BigDecimal, а также может быть возвращено значение с противоположным знаком.

Source
def max(that: BigDecimal): BigDecimal

Возвращает максимальное значение между этим и that, или this, если они равны.

Source
def min(that: BigDecimal): BigDecimal

Возвращает минимальное значение между этим и that, или this, если они равны.

Source
def pow(n: Int): BigDecimal

Возвращает BigDecimal, значение которого равно этому в степени n.

Source
def precision: Int

Возвращает точность этого BigDecimal.

Source
def quot(that: BigDecimal): BigDecimal

Деление с получением целого значения.

Source
def remainder(that: BigDecimal): BigDecimal

Остаток от деления этого на that.

Source
def round(mc: MathContext): BigDecimal

Возвращает BigDecimal, округлённый в соответствии с настройками MathContext, но сохраняя собственный MathContext для будущих операций.

Source
def rounded: BigDecimal

Возвращает округлённый BigDecimal в соответствии с собственными MathContext настройками.

Source
def scale: Int

Возвращает масштаб этого BigDecimal.

Source
def setScale(scale: Int): BigDecimal

Возвращает BigDecimal, масштаб которой равен указанному значению, и чьё значение численно равно значению этого BigDecimal.

Source
def setScale(scale: Int, mode: RoundingMode): BigDecimal

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
def signum: Int

Возвращает знак этого BigDecimal; -1, если он меньше 0, +1, если он больше 0, 0, если он равен 0.

Source
def to(end: BigDecimal): Partial[BigDecimal, Inclusive[BigDecimal]]

Как until, но включающий конечное значение.

Source
def to(end: BigDecimal, step: BigDecimal): Inclusive[BigDecimal]

Как until, но включающий конечное значение.

Source
def toBigInt: BigInt

Преобразует этот BigDecimal в scala.BigInt.

Source
def toBigIntExact: Option[BigInt]

Преобразует этот 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
override def toString: String

Возвращает строковое представление этого BigDecimal в десятичном формате.

Definition Classes Any

Source
def ulp: BigDecimal

Возвращает размер ulp (единицы в последнем разряде) этого BigDecimal.

Source
def unary_-: BigDecimal

Возвращает BigDecimal, значение которого является отрицанием значения этого BigDecimal.

Source
def underlying: Object

Source
def until(end: BigDecimal): Partial[BigDecimal, Exclusive[BigDecimal]]

Создаёт частично сконструированный 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
end

Конечное значение диапазона (исключающее)

Returns

Частично сконструированный NumericRange

Source
def until(end: BigDecimal, step: BigDecimal): Exclusive[BigDecimal]

То же, что и одноаргументный until, но создаёт диапазон сразу.

Inherited methods

Source
def <(that: BigDecimal): Boolean

Возвращает true, если this меньше that

Inherited from Ordered

Source
def <=(that: BigDecimal): Boolean

Возвращает true, если this меньше или равно that.

Inherited from Ordered

Source
def >(that: BigDecimal): Boolean

Возвращает true, если this больше that.

Inherited from Ordered

Source
def >=(that: BigDecimal): Boolean

Возвращает true, если this больше или равно that.

Inherited from Ordered

Source
def compareTo(that: BigDecimal): Int

Результат сравнения this с операндом that.

Унаследовано от Ordered

Источник
def toByte: Byte

Возвращает значение этого объекта как scala.Byte. Это может включать округление или усечение.

Унаследовано от ScalaNumericAnyConversions

Источник
def toChar: Char

Возвращает значение этого объекта как scala.Char. Это может включать округление или усечение.

Унаследовано от ScalaNumericAnyConversions

Источник
def toDouble: Double

Возвращает значение этого объекта как scala.Double. Это может включать округление или усечение.

Унаследовано от ScalaNumericAnyConversions

Источник
def toFloat: Float

Возвращает значение этого объекта как scala.Float. Это может включать округление или усечение.

Унаследовано от ScalaNumericAnyConversions

Источник
def toInt: Int

Возвращает значение этого объекта как scala.Int. Это может включать округление или усечение.

Унаследовано от ScalaNumericAnyConversions

Источник
def toLong: Long

Возвращает значение этого объекта как scala.Long. Это может включать округление или усечение.

Унаследовано от ScalaNumericAnyConversions

Источник
def toShort: Short

Возвращает значение этого объекта как scala.Short. Это может включать округление или усечение.

Унаследовано от ScalaNumericAnyConversions

Источник
protected def unifiedPrimitiveEquals(x: Any): Boolean

Должен вызываться только после исключения всех известных типов, не являющихся примитивами. Этот метод не будет перенаправлять в другое место после проверки на примитивы, чтобы избежать бесконечной рекурсии между 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API