Класс 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 левого аргумента всегда определяет степень округления, если таковое имеется, и является той, которая распространяется через арифметические операции, которые сами не применяют округления.
| Суперобъекты |
|---|
Конструкторы
Исходный код
def this(bigDecimal: BigDecimal)
Конкретные методы
Исходный код
Остаток от деления этого на that.
Исходный код
Умножение 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 на равенство.
Исходный код
def floatValue: Float
Преобразует этот BigDecimal в Float. Если у этого BigDecimal слишком большая величина для представления в формате float, он будет преобразован в Float.NEGATIVE_INFINITY или Float.POSITIVE_INFINITY соответственно.
Исходный код
Возвращает хэш-код для этого BigDecimal. Обратите внимание, что он не просто использует hashCode базового объекта Java, потому что мы сравниваем BigDecimal с compareTo, что определяет 2 == 2.00, в то время как в Java они не равны, если у них неравные hashCode. Эти хэш-коды согласуются с BigInt для целых чисел до ~4934 знаков (диапазон IEEE 128-битного числа с плавающей точкой). За этим пределом хэш-коды будут отличаться; это предотвращает явное представление формы BigInt для значений BigDecimal с большими показателями степени.
| Классы-определения | Any |
|---|
Исходный код
Преобразует этот 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 |
|---|
Исходный код
Исходный код
Преобразует этот BigDecimal в Long. Если BigDecimal слишком большой для Long, возвращаются только 64 младших бита. Обратите внимание, что при этом преобразовании может потеряться информация о величине значения BigDecimal, а также может быть возвращено значение с противоположным знаком.
Исходный код
Возвращает максимальное значение из этого и that, или this, если они равны.
Исходный код
Возвращает минимальное значение из этого и that, или this, если они равны.
Исходный код
Возвращает BigDecimal, значение которого равно этому ** n.
Исходный код
Возвращает точность этого BigDecimal.
Исходный код
Деление для получения целого значения.
Исходный код
Остаток от деления этого на that.
Исходный код
Возвращает BigDecimal, округлённый в соответствии с настройками MathContext, но сохраняя собственные настройки MathContext для будущих операций.
Исходный код
def rounded: BigDecimal
Возвращает BigDecimal, округлённый в соответствии с его собственными MathContext
Исходный код
Возвращает масштаб этого BigDecimal.
Исходный код
Возвращает BigDecimal, чей масштаб равен указанному значению, и чьё значение численно равно этому значению 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
Возвращает знак этого 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.
| Inherited from | Ordered |
|---|
Source
Возвращает значение этого объекта как scala.Byte. Может потребоваться округление или усечение.
| Inherited from | ScalaNumericAnyConversions |
|---|
Source
Возвращает значение этого объекта как scala.Char. Может потребоваться округление или усечение.
| Наследуется от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта в виде scala.Double. Это может потребовать округления или усечения.
| Наследуется от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта в виде scala.Float. Это может потребовать округления или усечения.
| Наследуется от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта в виде scala.Int. Это может потребовать округления или усечения.
| Наследуется от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта в виде scala.Long. Это может потребовать округления или усечения.
| Наследуется от | ScalaNumericAnyConversions |
|---|
Источник
Возвращает значение этого объекта в виде scala.Short. Это может потребовать округления или усечения.
| Наследуется от | ScalaNumericAnyConversions |
|---|
Источник
Должно вызываться только после исключения всех известных типов, не являющихся примитивами. Этот метод не будет перенаправляться никуда больше после проверки на примитивы, чтобы избежать бесконечной рекурсии между 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