Spec-Zone.ru › OpenJDK 21

Класс Double

java.lang.Object
java.lang.Number
java.lang.Double
Все реализованные интерфейсы:
Serializable, Comparable<Double>, Constable, ConstantDesc
public final class Double extends Number implements Comparable<Double>, Constable, ConstantDesc
Класс Double оборачивает значение примитивного типа double в объект. Объект типа Double содержит единственное поле типа double.

Кроме того, этот класс предоставляет несколько методов для преобразования double в String и String в double, а также другие константы и методы, полезные при работе с double.

Это класс значение; программисты должны рассматривать экземпляры, которые равны, как взаимозаменяемые и не должны использовать экземпляры для синхронизации, иначе может возникнуть непредсказуемое поведение. Например, в будущих версиях синхронизация может не сработать.

Равенство, эквивалентность и сравнение чисел с плавающей точкой

Значения чисел с плавающей точкой IEEE 754 включают конечные значения, отличные от нуля, знакомые нули (+0.0 и -0.0), знакомые бесконечности (положительная бесконечность и отрицательная бесконечность), и NaN (не число).

Отношение эквивалентности на множестве значений — это булево отношение на парах значений, которое является рефлексивным, симметричным и транзитивным. Для получения более подробной информации об отношениях эквивалентности и равенстве объектов см. Object.equals спецификацию. Отношение эквивалентности разбивает значения, к которым оно применяется, на множества, называемые классами эквивалентности. Все члены класса эквивалентности равны друг другу по отношению. Класс эквивалентности может содержать только один член. По крайней мере, для некоторых целей, все члены класса эквивалентности взаимозаменяемы. В частности, в численном выражении эквивалентные значения можно заменить друг другом без изменения результата выражения, что означает изменение класса эквивалентности результата выражения.

Обращает внимание, что встроенная операция == над числами с плавающей точкой не является отношением эквивалентности. Несмотря на то, что она не определяет отношение эквивалентности, семантика оператора IEEE 754 == была специально разработана для удовлетворения других потребностей численного вычисления. Есть два исключения, где свойства отношения эквивалентности не соблюдаются == для чисел с плавающей точкой:

  • Если v1 и v2 оба представляют NaN, то v1 == v2 имеет значение false. Следовательно, для двух аргументов NaN рефлексивное свойство отношения эквивалентности не соблюдается оператором ==.
  • Если v1 представляет +0.0, а v2 представляет -0.0, или наоборот, то v1 == v2 имеет значение true, хотя +0.0 и -0.0 различимы при различных операциях с плавающей точкой. Например, 1.0/+0.0 вычисляется до положительной бесконечности, а 1.0/-0.0 вычисляется до отрицательной бесконечности, и положительная и отрицательная бесконечности не равны друг другу и не эквивалентны друг другу. Таким образом, хотя входной знаковый ноль чаще всего определяет знак результата нуля, из-за деления на ноль, +0.0 и -0.0 не могут быть взаимозаменяемы в общем случае. Знак входного нуля также оказывает не подменяемый эффект на результат некоторых методов математической библиотеки.

Для упорядоченных сравнений с использованием встроенных операторов сравнения (<, <=, и т. д.), значения NaN имеют другую аномальную ситуацию: NaN не меньше, не больше и не равно никакому значению, включая себя. Это означает, что трихотомия сравнения не соблюдается.

Для обеспечения надлежащей семантики методов equals и compareTo, эти методы не могут быть просто оболочками вокруг == или операторов упорядоченного сравнения. Вместо этого equals использует эквивалентность представления, определяя аргументы NaN как равные друг другу, восстанавливая рефлексивность, и определяя, что +0.0 не равно -0.0. Для сравнений, compareTo определяет полное упорядочение, где -0.0 меньше +0.0, а NaN равно самому себе и считается больше положительной бесконечности.

Операционные семантики equals и compareTo выражаются через преобразование в двоичный код значений чисел с плавающей точкой в целочисленные значения.

Естественный порядок, реализованный в compareTo, согласован с equals. То есть, два объекта считаются равными по equals тогда и только тогда, когда compareTo над этими объектами возвращает ноль.

Отрегулированные поведения, определенные для equals и compareTo, позволяют экземплярам классов-оболочек корректно работать со стандартными структурами данных. Например, определение значений NaN как equals друг другу позволяет использовать NaN в качестве элемента HashSet или ключа HashMap. Аналогично, определение compareTo как полного упорядочения, включая +0.0, -0.0, и NaN, позволяет использовать экземпляры классов-оболочек в качестве элементов SortedSet или ключей SortedMap.

Сравнение числового равенства с различными полезными отношениями эквивалентности, которые можно определить для чисел с плавающей точкой:

числовое равенство (== оператор): (Не является отношением эквивалентности)
Два значения чисел с плавающей точкой представляют одно и то же расширенное действительное число. Расширенные действительные числа — это действительные числа, дополненные положительной и отрицательной бесконечностью. При числовом равенстве +0.0 и -0.0 равны, поскольку оба отображаются на то же действительное значение, 0. NaN не отображается ни на какое действительное число и не равно никакому значению, включая себя.
битовая эквивалентность:
Биты двух значений чисел с плавающей точкой одинаковы. Это отношение эквивалентности для double значений a и b реализуется выражением
Double.doubleToRawLongBits(a) == Double.doubleToRawLongBits(b)
В соответствии с этим отношением, +0.0 и -0.0 отличаются друг от друга, и каждый битовый шаблон, кодирующий NaN, отличается от каждого другого битового шаблона, кодирующего NaN.
эквивалентность представления:
Два значения чисел с плавающей точкой представляют одно и то же данное IEEE 754. В частности, для конечных значений знак, экспонента и мантисса значений чисел с плавающей точкой совпадают. По этому отношению:
  • +0.0 и -0.0 отличаются друг от друга.
  • каждый битовый шаблон, кодирующий NaN, считается эквивалентным каждому другому
  • положительная бесконечность эквивалентна положительной бесконечности; отрицательная бесконечность эквивалентна отрицательной бесконечности.
Выражения, реализующие это отношение эквивалентности, включают:
  • Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
  • Double.valueOf(a).equals(Double.valueOf(b))
  • Double.compare(a, b) == 0
Обратите внимание, что эквивалентность представления часто является подходящим понятием эквивалентности для проверки поведения математических библиотек.
Для двух значений двоичных чисел с плавающей точкой a и b, если ни одно из a и b не равно нулю или NaN, то три отношения — числовое равенство, битовая эквивалентность и эквивалентность представления a и b имеют одинаковое значение true/false. Другими словами, для двоичных значений чисел с плавающей точкой три отношения различаются только тогда, когда хотя бы один из аргументов равен нулю или NaN.
См. Спецификацию языка Java:
4.2.3 Типы, форматы и значения чисел с плавающей точкой
4.2.4 Операции с числами с плавающей точкой
15.21.1 Операторы числового равенства == и !=
15.20.1 Операторы численного сравнения <, <=, >, и >=
С:
1.0
См. также:
  • Стандарт IEEE для арифметики с плавающей точкой
  • Сериализованная форма

Краткое описание полей

Модификатор и тип Поле Описание
static final int BYTES
Количество байтов, используемых для представления значения double.
static final int MAX_EXPONENT
Максимальный показатель степени для конечной переменной double.
static final double MAX_VALUE
Константа, хранящая наибольшее положительное конечное значение типа double, (2-2-52)·21023.
static final int MIN_EXPONENT
Минимальный показатель степени для нормализованной переменной double.
static final double MIN_NORMAL
Константа, хранящая наименьшее положительное нормализованное значение типа double, 2-1022.
static final double MIN_VALUE
Константа, хранящая наименьшее положительное ненулевое значение типа double, 2-1074.
static final double NaN
Константа, хранящая значение Не Число (NaN) типа double.
static final double NEGATIVE_INFINITY
Константа, хранящая отрицательную бесконечность типа double.
static final double POSITIVE_INFINITY
Константа, хранящая положительную бесконечность типа double.
static final int PRECISION
Количество битов в мантиссе значения double.
static final int SIZE
Количество битов, используемых для представления значения double.
static final Class<Double> TYPE
Экземпляр Class, представляющий примитивный тип double.

Краткое описание конструкторов

Конструктор Описание
Double(double value)
Устаревший, для удаления: Элемент API может быть удален в будущей версии.
Использовать этот конструктор редко уместно.
Double(String s)
Устаревший, для удаления: Элемент API может быть удален в будущей версии.
Использовать этот конструктор редко уместно.

Краткое описание методов

Модификатор и тип Метод Описание
byte byteValue()
Возвращает значение этого Double как byte после сужения примитивного преобразования.
static int compare(double d1, double d2)
Сравнивает два указанных значения double.
int compareTo(Double anotherDouble)
Сравнивает два объекта Double численно.
Optional<Double> describeConstable()
Возвращает Optional, содержащий номинальный дескриптор для этого экземпляра, который является самим экземпляром.
static long doubleToLongBits(double value)
Возвращает представление указанного значения с плавающей запятой в соответствии с битовой структурой "формата двойной точности" с плавающей запятой IEEE 754.
static long doubleToRawLongBits(double value)
Возвращает представление указанного значения с плавающей запятой в соответствии с битовой структурой "формата двойной точности" с плавающей запятой IEEE 754, сохраняя значения Не Число (NaN).
double doubleValue()
Возвращает значение double этого объекта Double.
boolean equals(Object obj)
Сравнивает этот объект с указанным объектом.
float floatValue()
Возвращает значение этого Double как float после сужения примитивного преобразования.
int hashCode()
Возвращает код хэша для этого объекта Double.
static int hashCode(double value)
Возвращает код хэша для значения double; совместимо с Double.hashCode().
int intValue()
Возвращает значение этого Double как int после сужения примитивного преобразования.
static boolean isFinite(double d)
Возвращает true, если аргумент является конечным значением с плавающей запятой; возвращает false в противном случае (для аргументов NaN и бесконечности).
boolean isInfinite()
Возвращает true, если значение этого Double бесконечно велико по модулю, false в противном случае.
static boolean isInfinite(double v)
Возвращает true, если указанное число бесконечно велико по модулю, false в противном случае.
boolean isNaN()
Возвращает true, если это значение Double является значением Не Число (NaN), false в противном случае.
static boolean isNaN(double v)
Возвращает true, если указанное число является значением Не Число (NaN), false в противном случае.
static double longBitsToDouble(long bits)
Возвращает значение double, соответствующее заданному битовому представлению.
long longValue()
Возвращает значение этого Double как long после сужения примитивного преобразования.
static double max(double a, double b)
Возвращает большее из двух значений double так, как если бы вызывали Math.max.
static double min(double a, double b)
Возвращает меньшее из двух значений double так, как если бы вызывали Math.min.
static double parseDouble(String s)
Возвращает новый double, инициализированный значением, представленным указанным String, как выполняется метод valueOf класса Double.
Double resolveConstantDesc(MethodHandles.Lookup lookup)
Разрешает этот экземпляр как ConstantDesc, результатом чего является сам экземпляр.
short shortValue()
Возвращает значение этого Double как short после сужения примитивного преобразования.
static double sum(double a, double b)
Складывает два значения double вместе в соответствии с оператором +.
static String toHexString(double d)
Возвращает шестнадцатеричное строковое представление аргумента double.
String toString()
Возвращает строковое представление этого объекта Double.
static String toString(double d)
Возвращает строковое представление аргумента double.
static Double valueOf(double d)
Возвращает экземпляр Double, представляющий указанное значение double.
static Double valueOf(String s)
Возвращает объект Double, содержащий значение double, представленное строкой-аргументом s.

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание полей

POSITIVE_INFINITY

public static final double POSITIVE_INFINITY
Константа, хранящая положительную бесконечность типа double. Она равна значению, возвращаемому Double.longBitsToDouble(0x7ff0000000000000L).
См. также:
  • Значения константных полей

NEGATIVE_INFINITY

public static final double NEGATIVE_INFINITY
Константа, хранящая отрицательную бесконечность типа double. Она равна значению, возвращаемому Double.longBitsToDouble(0xfff0000000000000L).
См. также:
  • Значения константных полей

NaN

public static final double NaN
Константа, хранящая значение «Не число» (NaN) типа double. Она эквивалентна значению, возвращаемому Double.longBitsToDouble(0x7ff8000000000000L).
См. также:
  • Значения константных полей

MAX_VALUE

public static final double MAX_VALUE
Константа, хранящая наибольшее положительное конечное значение типа double, (2-2-52)·21023. Она равна шестнадцатеричной плавающей точке 0x1.fffffffffffffP+1023 и также равна Double.longBitsToDouble(0x7fefffffffffffffL).
См. также:
  • Значения константных полей

MIN_NORMAL

public static final double MIN_NORMAL
Константа, хранящая наименьшее положительное нормализованное значение типа double, 2-1022. Она равна шестнадцатеричной плавающей точке 0x1.0p-1022 и также равна Double.longBitsToDouble(0x0010000000000000L).
С:
1.6
См. также:
  • Значения константных полей

MIN_VALUE

public static final double MIN_VALUE
Константа, хранящая наименьшее положительное ненулевое значение типа double, 2-1074. Она равна шестнадцатеричной плавающей точке 0x0.0000000000001P-1022 и также равна Double.longBitsToDouble(0x1L).
См. также:
  • Значения константных полей

SIZE

public static final int SIZE
Количество бит, используемых для представления значения double.
С:
1.5
См. также:
  • Значения константных полей

PRECISION

public static final int PRECISION
Количество бит в значащей части значения double. Это параметр N в разделе 4.2.3 спецификации языка Java.
С:
19
См. также:
  • Значения константных полей

MAX_EXPONENT

public static final int MAX_EXPONENT
Максимальный показатель степени, который может иметь конечная переменная double. Он равен значению, возвращаемому Math.getExponent(Double.MAX_VALUE).
С:
1.6
См. также:
  • Значения константных полей

MIN_EXPONENT

public static final int MIN_EXPONENT
Минимальный показатель степени, который может иметь нормализованная переменная double. Он равен значению, возвращаемому Math.getExponent(Double.MIN_NORMAL).
С:
1.6
См. также:
  • Значения константных полей

BYTES

public static final int BYTES
Количество байтов, используемых для представления значения double.
С:
1.8
См. также:
  • Значения константных полей

TYPE

public static final Class<Double> TYPE
Экземпляр Class, представляющий примитивный тип double.
С:
1.1

Подробное описание конструкторов

Double

@Deprecated(since="9", forRemoval=true) public Double(double value)
Устарело, для удаления: Этот элемент API может быть удален в будущей версии.
Редко уместно использовать этот конструктор. Статический фабричный метод valueOf(double) обычно является лучшим выбором, так как он, вероятно, обеспечит значительно лучшую производительность по памяти и времени.
Создаёт новый объект типа Double, представляющий примитивное значение double.
Параметры:
value - значение, которое должно быть представлено объектом Double.

Double

@Deprecated(since="9", forRemoval=true) public Double(String s) throws NumberFormatException
Устарело, для удаления: Этот элемент API может быть удален в будущей версии.
Редко уместно использовать этот конструктор. Используйте parseDouble(String) для преобразования строки в примитивное значение double или используйте valueOf(String) для преобразования строки в объект Double.
Создаёт новый объект типа Double, представляющий значение с плавающей точкой типа double, представленное строкой. Строка преобразуется в значение double как если бы это делал метод valueOf.
Параметры:
s - строка, которая должна быть преобразована в значение Double.
Исключения:
NumberFormatException - если строка не содержит анализируемого числа.

Подробное описание методов

END_OF_DOCUMENT_MARKER

toString

public static String toString(double d)
Возвращает строковое представление аргумента. Все упоминаемые ниже символы — символы ASCII.
  • Если аргумент NaN, результатом является строка "NaN".
  • В противном случае результатом является строка, представляющая знак и модуль (абсолютное значение) аргумента. Если знак отрицательный, первый символ результата — '-' ('\u002D'); если знак положительный, символ знака в результате не появляется. Что касается модуля m:
    • Если m бесконечность, она представлена символами "Infinity"; таким образом, положительная бесконечность даёт результат "Infinity", а отрицательная бесконечность — результат "-Infinity".
    • Если m ноль, она представлена символами "0.0"; таким образом, отрицательный ноль даёт результат "-0.0", а положительный ноль — результат "0.0".
    • В противном случае m положительно и конечно. Она преобразуется в строку в два этапа:
      • Выбор десятичного числа: Выбирается чётко определённое десятичное число dm для представления m. Это десятичное число (почти всегда) является кратчайшим, которое округляется до m в соответствии с политикой округления до ближайшего значения арифметики с плавающей точкой IEEE 754.
      • Форматирование как строки: Десятичное число dm форматируется как строка, либо в простом, либо в компьютерном научном формате, в зависимости от его значения.

Десятичное число — это число вида s×10i для некоторых (уникальных) целых чисел s > 0 и i, таких что s не кратно 10. Эти целые числа — мантисса и экспонента десятичного числа соответственно. Длина десятичного числа — (уникальное) положительное целое число n, удовлетворяющее условию 10n-1 ≤ s < 10n.

Десятичное число dm для конечного положительного m определяется следующим образом:

  • Пусть R — множество всех десятичных чисел, которые округляются до m в соответствии с обычной политикой округления до ближайшего значения арифметики с плавающей точкой IEEE 754.
  • Пусть p — минимальная длина среди всех десятичных чисел в R.
  • Когда p ≥ 2, пусть T — множество всех десятичных чисел в R с длиной p. В противном случае пусть T — множество всех десятичных чисел в R с длиной 1 или 2.
  • Определите dm как десятичное число в T, которое наиболее близко к m. Или, если таких десятичных чисел в T два, выберите то, у которого чётная мантисса.

Выбранное (уникальное) десятичное число dm затем форматируется. Пусть s, i и n — мантисса, экспонента и длина dm соответственно. Кроме того, пусть e = n + i - 1 и пусть s1…sn — обычное десятичное разложение s. Обратите внимание, что s1 ≠ 0 и sn ≠ 0. Ниже, десятичная точка '.' является '\u002E', а индикатор экспоненты 'E' является '\u0045'.

  • Случай -3 ≤ e < 0: dm форматируется как 0.0…0s1…sn, где между десятичной точкой и s1 ровно -(n + i) нулей. Например, 123 × 10-4 форматируется как 0.0123.
  • Случай 0 ≤ e < 7:
    • Подслучай i ≥ 0: dm форматируется как s1…sn0…0.0, где между sn и десятичной точкой ровно i нулей. Например, 123 × 102 форматируется как 12300.0.
    • Подслучай i < 0: dm форматируется как s1…sn+i.sn+i+1…sn, где справа от десятичной точки ровно -i цифр. Например, 123 × 10-1 форматируется как 12.3.
  • Случай e < -3 или e ≥ 7: для форматирования dm используется компьютерный научный формат. Здесь e форматируется как с помощью Integer.toString(int).
    • Подслучай n = 1: dm форматируется как s1.0Ee. Например, 1 × 1023 форматируется как 1.0E23.
    • Подслучай n > 1: dm форматируется как s1.s2…snEe. Например, 123 × 10-21 форматируется как 1.23E-19.

Для создания локализованных строковых представлений значения с плавающей точкой используйте подклассы NumberFormat.

Parameters:
d - преобразуемое double.
Returns:
строковое представление аргумента.

toHexString

public static String toHexString(double d)
Возвращает шестнадцатеричное строковое представление аргумента с плавающей точкой. Все упоминаемые ниже символы — символы ASCII.
  • Если аргумент NaN, результатом является строка "NaN".
  • В противном случае результатом является строка, представляющая знак и модуль аргумента. Если знак отрицательный, первый символ результата — '-' ('\u002D'); если знак положительный, символ знака в результате не появляется. Что касается модуля m:
    • Если m бесконечность, она представлена строкой "Infinity"; таким образом, положительная бесконечность даёт результат "Infinity", а отрицательная бесконечность — результат "-Infinity".
    • Если m ноль, она представлена строкой "0x0.0p0"; таким образом, отрицательный ноль даёт результат "-0x0.0p0", а положительный ноль — результат "0x0.0p0".
    • Если m — значение с плавающей точкой с нормализованным представлением, для представления полей мантиссы и экспоненты используются подстроки. Ментисса представляется символами "0x1.", за которыми следует шестнадцатеричное представление остальной части мантиссы как дроби. Завершающие нули в шестнадцатеричном представлении удаляются, за исключением случая, когда все цифры нули, в этом случае используется единичный ноль. Далее экспонента представляется символами "p", за которыми следует десятичная строка необусловленной экспоненты, как если бы она была получена вызовом Integer.toString к значению экспоненты.
    • Если m — значение с плавающей точкой с субнормализованным представлением, мантисса представляется символами "0x0.", за которыми следует шестнадцатеричное представление остальной части мантиссы как дроби. Завершающие нули в шестнадцатеричном представлении удаляются. Далее экспонента представляется символами "p-1022". Обратите внимание, что в субнормализованной мантиссе должна быть хотя бы одна ненулевая цифра.
Примеры
Значение с плавающей точкой Шестнадцатеричная строка
1.0 0x1.0p0
-1.0 -0x1.0p0
2.0 0x1.0p1
3.0 0x1.8p1
0.5 0x1.0p-1
0.25 0x1.0p-2
Double.MAX_VALUE 0x1.fffffffffffffp1023
Minimum Normal Value 0x1.0p-1022
Maximum Subnormal Value 0x0.fffffffffffffp-1022
Double.MIN_VALUE 0x0.0000000000001p-1022
Parameters:
d - преобразуемое значение с плавающей точкой.
Returns:
шестнадцатеричное строковое представление аргумента.
Since:
1.5
END_OF_DOCUMENT_MARKER

valueOf

public static Double valueOf(String s) throws NumberFormatException
Возвращает объект Double, содержащий значение double, представленное строкой-аргументом s.

Если s является null, то генерируется NullPointerException.

Пробельные символы в начале и конце s игнорируются. Пробелы удаляются так же, как и методом String.trim(); то есть удаляются как пробельные символы ASCII, так и управляющие символы. Остальная часть s должна соответствовать правилам лексического синтаксиса для FloatValue:

FloatValue:
Signopt NaN
Signopt Infinity
Signopt FloatingPointLiteral
Signopt HexFloatingPointLiteral
SignedInteger
HexFloatingPointLiteral:
HexSignificand BinaryExponent FloatTypeSuffixopt
HexSignificand:
HexNumeral
HexNumeral .
0x HexDigitsopt . HexDigits
0X HexDigitsopt . HexDigits
BinaryExponent:
BinaryExponentIndicator SignedInteger
BinaryExponentIndicator:
p
P
где Sign, FloatingPointLiteral, HexNumeral, HexDigits, SignedInteger и FloatTypeSuffix определены в разделах лексической структуры спецификации языка Java, за исключением того, что подчёркивания не допускаются между цифрами. Если s не соответствует форме FloatValue, то генерируется NumberFormatException. В противном случае s рассматривается как представление точного десятичного значения в обычном "компьютерном научном формате" или точного шестнадцатеричного значения; это точное числовое значение затем концептуально преобразуется в "бесконечно точное" двоичное значение, которое затем округляется до типа double по обычному правилу округления до ближайшего значения IEEE 754 для плавающей точки, которое включает сохранение знака нулевого значения. Обратите внимание, что правило округления до ближайшего значения также подразумевает поведение переполнения и недополнения; если точное значение s достаточно велико по модулю (больше или равно (MAX_VALUE + ulp(MAX_VALUE)/2)), округление до double приведёт к бесконечности, и если точное значение s достаточно мало по модулю (меньше или равно MIN_VALUE/2)), округление до float приведёт к нулю. Наконец, после округления возвращается объект Double, представляющий это значение double.

Для интерпретации локализованных строковых представлений значения с плавающей точкой используйте подклассы NumberFormat.

Обратите внимание, что заключительные спецификаторы формата, определяющие тип литерала с плавающей точкой (1.0f — это значение float; 1.0d — это значение double), не влияют на результаты этого метода. Другими словами, числовое значение входной строки преобразуется непосредственно в целевой тип с плавающей точкой. Последовательность преобразований в два этапа, строка в float и затем float в double, не эквивалентна прямому преобразованию строки в double. Например, литерал float равен значению double 0.10000000149011612; литерал float 0.1f представляет другое числовое значение, чем литерал double 0.1. (Числовое значение 0,1 не может быть точно представлено в двоичном числе с плавающей точкой.)

Чтобы избежать вызова этого метода для недопустимой строки и получения исключения NumberFormatException, можно использовать следующий регулярный выражение для проверки входной строки:

 final String Digits     = "(\\p{Digit}+)";
 final String HexDigits  = "(\\p{XDigit}+)";
 // an exponent is 'e' or 'E' followed by an optionally
 // signed decimal integer.
 final String Exp        = "[eE][+-]?"+Digits;
 final String fpRegex    =
     ("[\\x00-\\x20]*"+  // Optional leading "whitespace"
      "[+-]?(" + // Optional sign character
      "NaN|" +           // "NaN" string
      "Infinity|" +      // "Infinity" string

      // A decimal floating-point string representing a finite positive
      // number without a leading sign has at most five basic pieces:
      // Digits . Digits ExponentPart FloatTypeSuffix
      //
      // Since this method allows integer-only strings as input
      // in addition to strings of floating-point literals, the
      // two sub-patterns below are simplifications of the grammar
      // productions from section 3.10.2 of
      // The Java Language Specification.

      // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
      "((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+

      // . Digits ExponentPart_opt FloatTypeSuffix_opt
      "(\\.("+Digits+")("+Exp+")?)|"+

      // Hexadecimal strings
      "((" +
       // 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt
       "(0[xX]" + HexDigits + "(\\.)?)|" +

       // 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt
       "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +

       ")[pP][+-]?" + Digits + "))" +
      "[fFdD]?))" +
      "[\\x00-\\x20]*");// Optional trailing "whitespace"
 if (Pattern.matches(fpRegex, myString))
     Double.valueOf(myString); // Will not throw NumberFormatException
 else {
     // Perform suitable alternative action
 }
Parameters:
s - строка, подлежащая парсингу.
Returns:
объект Double, содержащий значение, представленное String аргументом.
Throws:
NumberFormatException - если строка не содержит число, подлежащее парсингу.

valueOf

public static Double valueOf(double d)
Возвращает экземпляр Double, представляющий указанное значение double. Если новый экземпляр Double не требуется, этот метод обычно следует использовать вместо конструктора Double(double), поскольку этот метод, скорее всего, обеспечит значительно лучшие производительность по памяти и времени за счёт кэширования часто запрашиваемых значений.
Parameters:
d - значение типа double.
Returns:
экземпляр Double, представляющий d.
Since:
1.5

parseDouble

public static double parseDouble(String s) throws NumberFormatException
Возвращает новый double, инициализированный значением, представленным указанной String, как выполняется методом valueOf класса Double.
Parameters:
s - строка, подлежащая парсингу.
Returns:
значение double, представленное строковым аргументом.
Throws:
NullPointerException - если строка равна null
NumberFormatException - если строка не содержит значение double, подлежащее парсингу.
Since:
1.2
See Also:
  • valueOf(String)

isNaN

public static boolean isNaN(double v)
Возвращает true, если указанное число является значением Not-a-Number (NaN), false в противном случае.
API Note:
Этот метод соответствует операции isNaN, определённой в IEEE 754.
Parameters:
v - значение для проверки.
Returns:
true если значение аргумента равно NaN; false в противном случае.

isInfinite

public static boolean isInfinite(double v)
Возвращает true , если указанное число бесконечно велико по модулю, false в противном случае.
API Note:
Этот метод соответствует операции isInfinite, определённой в IEEE 754.
Parameters:
v - значение для проверки.
Returns:
true если значение аргумента равно положительной или отрицательной бесконечности; false в противном случае.

isFinite

public static boolean isFinite(double d)
Возвращает true , если аргумент является конечным значением с плавающей точкой; возвращает false в противном случае (для аргументов NaN и бесконечности).
API Note:
Этот метод соответствует операции isFinite, определённой в IEEE 754.
Parameters:
d - значение с плавающей точкой для проверки
Returns:
true если аргумент является конечным значением с плавающей точкой, false в противном случае.
Since:
1.8

isNaN

public boolean isNaN()
Возвращает true , если это значение Double является значением Not-a-Number (NaN), false в противном случае.
Returns:
true если значение, представленное этим объектом, равно NaN; false в противном случае.

isInfinite

public boolean isInfinite()
Возвращает true , если это значение Double бесконечно велико по модулю, false в противном случае.
Returns:
true если значение, представленное этим объектом, равно положительной или отрицательной бесконечности; false в противном случае.

toString

public String toString()
Возвращает строковое представление этого объекта Double. Примитивное значение double , представленное этим объектом, преобразуется в строку точно так же, как и методом toString с одним аргументом.
Overrides:
toString в классе Object
Returns:
строковое представление этого объекта.
See Also:
  • toString(double)

byteValue

public byte byteValue()
Возвращает значение этого объекта Double как тип byte после сужения примитивного типа.
Overrides:
byteValue в классе Number
Returns:
значение double , представленное этим объектом, преобразованное к типу byte
See Java Language Specification:
5.1.3 Narrowing Primitive Conversion
Since:
1.1

shortValue

public short shortValue()
Возвращает значение этого объекта Double как тип short после сужения примитивного типа.
Overrides:
shortValue в классе Number
Returns:
значение double , представленное этим объектом, преобразованное к типу short
See Java Language Specification:
5.1.3 Narrowing Primitive Conversion
Since:
1.1

intValue

public int intValue()
Возвращает значение этого Double в виде int после преобразования сужающего примитива.
Указано в:
intValue в классе Number
Возвращает:
значение double , представленное этим объектом, преобразованное в тип int
См. Спецификацию языка Java:
5.1.3 Преобразование сужающего примитива

longValue

public long longValue()
Возвращает значение этого Double в виде long после преобразования сужающего примитива.
Указано в:
longValue в классе Number
Возвращает:
значение double , представленное этим объектом, преобразованное в тип long
См. Спецификацию языка Java:
5.1.3 Преобразование сужающего примитива

floatValue

public float floatValue()
Возвращает значение этого Double в виде float после преобразования сужающего примитива.
Указано в:
floatValue в классе Number
Примечание API:
Этот метод соответствует операции convertFormat, определенной в IEEE 754.
Возвращает:
значение double , представленное этим объектом, преобразованное в тип float
См. Спецификацию языка Java:
5.1.3 Преобразование сужающего примитива
С:
1.0

doubleValue

public double doubleValue()
Возвращает значение double этого объекта Double.
Указано в:
doubleValue в классе Number
Возвращает:
значение double , представленное этим объектом

hashCode

public int hashCode()
Возвращает хэш-код для этого объекта Double. Результатом является исключающее ИЛИ двух половин целочисленного представления в двоичном формате long , точно так же, как и возвращается методом doubleToLongBits(double) для примитивного значения double , представленного этим объектом Double. То есть, хэш-код — это значение выражения:
(int)(v^(v>>>32))
где v определено как:
long v = Double.doubleToLongBits(this.doubleValue());
Переопределяет:
hashCode в классе Object
Возвращает:
значение hash code для этого объекта.
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

hashCode

public static int hashCode(double value)
Возвращает хэш-код для значения double ; совместимо с Double.hashCode().
Параметры:
value - значение для хэширования
Возвращает:
значение хэш-кода для значения double.
С:
1.8

equals

public boolean equals(Object obj)
Сравнивает этот объект с указанным объектом. Результатом является true тогда и только тогда, когда аргумент не null и является объектом типа Double , представляющим значение double , имеющее то же значение, что и значение double , представленное этим объектом. Для этой цели два значения double считаются одинаковыми тогда и только тогда, когда метод doubleToLongBits(double) возвращает одинаковое long значение, когда применяется к каждому.
Переопределяет:
equals в классе Object
Примечание API:
Этот метод определяется с точки зрения doubleToLongBits(double) , а не оператора == над значениями double , так как оператор == не определяет отношение эквивалентности и для выполнения контракта equals должно быть реализовано отношение эквивалентности; см. это обсуждение для получения подробной информации о равенстве и эквивалентности чисел с плавающей точкой.
Параметры:
obj - ссылка на объект для сравнения.
Возвращает:
true если этот объект такой же, как аргумент obj; false в противном случае.
См. Спецификацию языка Java:
15.21.1 Операторы числового равенства == и !=
См. также:
  • doubleToLongBits(double)

doubleToLongBits

public static long doubleToLongBits(double value)
Возвращает представление указанного значения с плавающей точкой двойной точности в соответствии с битовой структурой "формата двойной точности" IEEE 754.

Бит 63 (бит, выбираемый маской 0x8000000000000000L) представляет знак числа с плавающей точкой. Биты 62-52 (биты, выбираемые маской 0x7ff0000000000000L) представляют показатель степени. Биты 51-0 (биты, выбираемые маской 0x000fffffffffffffL) представляют мантиссу (иногда называемую мантиссой) числа с плавающей точкой.

Если аргумент — положительная бесконечность, результат равен 0x7ff0000000000000L.

Если аргумент — отрицательная бесконечность, результат равен 0xfff0000000000000L.

Если аргумент — NaN, результат равен 0x7ff8000000000000L.

Во всех случаях результат — целое число long , которое при передаче методу longBitsToDouble(long) произведёт значение с плавающей точкой, такое же, как и аргумент doubleToLongBits (за исключением всех значений NaN, которые сводятся к единственному "каноническому" значению NaN).

Параметры:
value - число с плавающей точкой двойной точности.
Возвращает:
биты, представляющие число с плавающей точкой.

doubleToRawLongBits

public static long doubleToRawLongBits(double value)
Возвращает представление указанного значения с плавающей точкой двойной точности в соответствии с битовой структурой "формата двойной точности" IEEE 754, сохраняя значения Not-a-Number (NaN).

Бит 63 (бит, выбираемый маской 0x8000000000000000L) представляет знак числа с плавающей точкой. Биты 62-52 (биты, выбираемые маской 0x7ff0000000000000L) представляют показатель степени. Биты 51-0 (биты, выбираемые маской 0x000fffffffffffffL) представляют мантиссу (иногда называемую мантиссой) числа с плавающей точкой.

Если аргумент — положительная бесконечность, результат равен 0x7ff0000000000000L.

Если аргумент — отрицательная бесконечность, результат равен 0xfff0000000000000L.

Если аргумент — NaN, результат — целое число long , представляющее фактическое значение NaN. В отличие от метода doubleToLongBits , doubleToRawLongBits не сводит все битовые шаблоны, кодирующие NaN, к одному "каноническому" значению NaN.

Во всех случаях результат — целое число long , которое при передаче методу longBitsToDouble(long) произведёт значение с плавающей точкой, такое же, как и аргумент doubleToRawLongBits.

Параметры:
value - число с плавающей точкой двойной точности.
Возвращает:
биты, представляющие число с плавающей точкой.
С:
1.3

longBitsToDouble

public static double longBitsToDouble(long bits)
Возвращает значение double , соответствующее заданному битовому представлению. Аргумент рассматривается как представление значения с плавающей точкой в соответствии с битовым расположением формата с плавающей точкой "double" IEEE 754.

Если аргумент равен 0x7ff0000000000000L, результат — положительная бесконечность.

Если аргумент равен 0xfff0000000000000L, результат — отрицательная бесконечность.

Если аргумент имеет любое значение в диапазоне 0x7ff0000000000001L по 0x7fffffffffffffffL или в диапазоне 0xfff0000000000001L по 0xffffffffffffffffL, результат — NaN. Ни одна операция с плавающей точкой IEEE 754, предоставляемая Java, не может отличить два значения NaN одного типа с разными битовыми шаблонами. Разные значения NaN можно различить только с помощью метода Double.doubleToRawLongBits.

Во всех остальных случаях пусть s, e и m — три значения, которые можно вычислить из аргумента:

int s = ((bits >> 63) == 0) ? 1 : -1;
int e = (int)((bits >> 52) & 0x7ffL);
long m = (e == 0) ?
                (bits & 0xfffffffffffffL) << 1 :
                (bits & 0xfffffffffffffL) | 0x10000000000000L;
Тогда результат с плавающей точкой равен значению математического выражения s·m·2e-1075.

Обратите внимание, что этот метод может не вернуть NaN с точно таким же битовым шаблоном, как и аргумент long. IEEE 754 различает два типа NaN: тихие NaN и NaN-сигнализации. Различия между двумя типами NaN обычно не видны в Java. Арифметические операции над NaN-сигнализациями превращают их в тихие NaN с другим, но часто похожим, битовым шаблоном. Однако на некоторых процессорах простое копирование NaN-сигнализации также выполняет это преобразование. В частности, копирование NaN-сигнализации для возврата в вызывающий метод может выполнить это преобразование. Поэтому longBitsToDouble может не вернуть double с битовым шаблоном NaN-сигнализации. Следовательно, для некоторых long значений doubleToRawLongBits(longBitsToDouble(start)) может не равняться start. Кроме того, конкретные битовые шаблоны, представляющие NaN-сигнализации, зависят от платформы; хотя все битовые шаблоны NaN, тихие или сигнализирующие, должны находиться в диапазоне NaN, указанном выше.

Параметры:
bits - любое целое число long.
Возвращает:
значение с плавающей точкой double с тем же битовым шаблоном.

compareTo

public int compareTo(Double anotherDouble)
Сравнивает два объекта Double численно. Этот метод налагает полную упорядоченность на объекты Double, с двумя отличиями по сравнению с неполной упорядоченностью, определенной операторами численного сравнения языка Java (<, <=, ==, >=, >) на значениях double.
  • NaN не упорядочен по отношению к другим значениям и не равен самому себе в операторах сравнения. Этот метод выбирает определение Double.NaN равным самому себе и больше всех других значений double (включая Double.POSITIVE_INFINITY).
  • Положительный и отрицательный ноль сравниваются численно, но являются различными и различимыми значениями. Этот метод выбирает определение положительного нуля (+0.0d) как большего, чем отрицательный ноль (-0.0d).
Это гарантирует, что естественное упорядочение объектов Double , установленное этим методом, совпадает с методом equals; см. это обсуждение для получения подробностей о сравнении и упорядочении с плавающей точкой.
Указано в:
compareTo в интерфейсе Comparable<Double>
Параметры:
anotherDouble - сравниваемое значение Double.
Возвращает:
значение 0 , если anotherDouble численно равно этому значению Double; значение меньше 0 , если это значение Double численно меньше anotherDouble; и значение больше 0 , если это значение Double численно больше anotherDouble.
См. Спецификацию языка Java:
15.20.1 Операторы численного сравнения <, <=, >, и >=
С:
1.2

compare

public static int compare(double d1, double d2)
Сравнивает два заданных значения double. Знак возвращаемого целочисленного значения совпадает со знаком целочисленного значения, которое было бы возвращено вызовом:
    Double.valueOf(d1).compareTo(Double.valueOf(d2))
 
Параметры:
d1 - первое сравниваемое значение double
d2 - второе сравниваемое значение double
Возвращает:
значение 0 , если d1 численно равно d2; значение меньше 0 , если d1 численно меньше d2; и значение больше 0 , если d1 численно больше d2.
С:
1.4

sum

public static double sum(double a, double b)
Складывает два значения double вместе, как и оператор +.
Примечание API:
Этот метод соответствует операции сложения, определенной в IEEE 754.
Параметры:
a - первый операнд
b - второй операнд
Возвращает:
сумму a и b
См. Спецификацию языка Java:
4.2.4 Операции с плавающей точкой
С:
1.8
См. также:
  • BinaryOperator

max

public static double max(double a, double b)
Возвращает большее из двух значений double , как если бы вызывали Math.max.
Примечание API:
Этот метод соответствует операции нахождения максимума, определенной в IEEE 754.
Параметры:
a - первый операнд
b - второй операнд
Возвращает:
большее из a и b
С:
1.8
См. также:
  • BinaryOperator

min

public static double min(double a, double b)
Возвращает меньшее из двух значений double , как если бы вызывали Math.min.
Примечание API:
Этот метод соответствует операции нахождения минимума, определенной в IEEE 754.
Параметры:
a - первый операнд
b - второй операнд
Возвращает:
меньшее из a и b.
С:
1.8
См. также:
  • BinaryOperator

describeConstable

public Optional<Double> describeConstable()
Возвращает Optional содержащий номинальный дескриптор для этого экземпляра, который является самим экземпляром.
Указано в:
describeConstable в интерфейсе Constable
Возвращает:
Optional описывающий экземпляр Double
С:
12

resolveConstantDesc

public Double resolveConstantDesc(MethodHandles.Lookup lookup)
Разрешает этот экземпляр как ConstantDesc, результатом чего является сам экземпляр.
Указано в:
resolveConstantDesc в интерфейсе ConstantDesc
Параметры:
lookup - игнорируется
Возвращает:
экземпляр Double
С:
12

© 1993, 2023, 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/21/docs/api/java.base/java/lang/Double.html

Spec-Zone.ru

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