Spec-Zone.ru › Scala 3.1

Класс scala.math.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

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

Исходный код
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 на равенство.

Исходный код
def floatValue: Float

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

Исходный код
override def hashCode(): Int

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

Классы-определения Any

Исходный код
def intValue: Int

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

Исходный код
def isBinaryDouble: Boolean

Проверяет, содержит ли этот BigDecimal, с точностью до точности, двоичное представление Double.

Исходный код
def isBinaryFloat: Boolean

Проверяет, содержит ли этот BigDecimal, с точностью до точности, двоичное представление Float.

Исходный код
def isDecimalDouble: Boolean

Проверяет, содержит ли этот BigDecimal десятичное представление Double.

Исходный код
def isDecimalFloat: Boolean

Проверяет, содержит ли этот BigDecimal десятичное представление Float.

Исходный код
def isExactDouble: Boolean

Проверяет, содержит ли этот BigDecimal точное разложение двоичной дробной формы Double в десятичную систему.

Исходный код
def isExactFloat: Boolean

Проверяет, содержит ли этот BigDecimal точное разложение двоичной дробной формы Float в десятичную систему.

Исходный код
override def isValidByte: Boolean

Классы-определения ScalaNumericAnyConversions

Исходный код
override def isValidChar: Boolean

Классы-определения ScalaNumericAnyConversions

Исходный код
override def isValidInt: Boolean

Классы-определения ScalaNumericAnyConversions

Исходный код
def isValidLong: Boolean

Исходный код
override def isValidShort: Boolean

Классы-определения ScalaNumericAnyConversions

Исходный код
def isWhole: Boolean

Исходный код
def longValue: Long

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

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

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

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

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

Исходный код
def pow(n: Int): BigDecimal

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

Исходный код
def precision: Int

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

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

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

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

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

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

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

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

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

Исходный код
def scale: Int

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

Исходный код
def setScale(scale: Int): BigDecimal

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

Исходный код
def setScale(scale: Int, mode: RoundingMode): BigDecimal

Исходный код
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.

Inherited from Ordered

Source
def toByte: Byte

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

Inherited from ScalaNumericAnyConversions

Source
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 и этим методом для неизвестных вариантов «Число».

Кроме того, это должно вызываться только в том случае, если числовой тип готов к преобразованию в 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.1.1/scala/math/BigDecimal.html

Spec-Zone.ru

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