Spec-Zone.ru › OpenJDK 27

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

Особенности преобразования десятичной записи в двоичную и обратно

Многие неожиданные результаты двоичной арифметики с плавающей точкой объясняются особенностями преобразования десятичной записи в двоичную и двоичной записи в десятичную. Целые числа можно точно представить в любой системе счисления, а возможность точного представления дробных чисел зависит от основания системы счисления. Например, в системе счисления с основанием 10 дробь 1/3 является периодической (0.33333....); но в системе счисления с основанием 3 дробь 1/3 представляется точно как 0.1(3), то есть 1 × 3-1. Аналогично, в системе счисления с основанием 10 дробь 1/10 точно представляется как 0.1 (1 × 10-1), а в системе счисления с основанием 2 она является периодической (0.0001100110011...(2)).

Значения типа float имеют 24 бита точности, а значения типа double — 53 бита точности. Следовательно, поскольку 0.1 является периодической дробью в системе счисления с основанием 2 с периодом длиной четыре бита, 0.1f != 0.1d. Более подробно, включая шестнадцатеричные литералы с плавающей точкой:

  • Точное числовое значение 0.1f (0x1.99999a0000000p-4f) равно 0.100000001490116119384765625.
  • Точное числовое значение 0.1d (0x1.999999999999ap-4d) равно 0.1000000000000000055511151231257827021181583404541015625.
Это ближайшие значения float и double соответственно к числовому значению 0.1. Эти результаты согласуются с тем, что значение float имеет точность, эквивалентную 6–9 десятичным цифрам, а значение double — точность, эквивалентную 15–17 десятичным цифрам. (Эквивалентная точность изменяется в зависимости от разной относительной плотности двоичных и десятичных значений в разных точках числовой прямой.)

Этот риск, связанный с представлением десятичных дробей, — одна из причин соблюдать осторожность при хранении денежных значений в виде float или double. Возможные альтернативы:

  • использовать BigDecimal для точного хранения десятичных дробных значений
  • масштабировать денежное значение так, чтобы оно стало целым числом, — например, умножить на 100, если значение выражено в центах, или на 1000, если значение выражено в тысячных долях, — а затем хранить масштабированное значение в целочисленном типе

Для каждого конечного числа с плавающей точкой и заданного типа чисел с плавающей точкой существует непрерывная область числовой прямой, которая отображается в это значение. При использовании политики округления по умолчанию — к ближайшему значению (JLS §15.4) — эта непрерывная область обычно имеет ширину в один ulp (единицу младшего разряда) и центрирована вокруг точно представимого значения. (На границах экспонент область асимметрична и больше со стороны большей экспоненты.) Например, для 0.1f область можно вычислить следующим образом:
// Указанные числовые значения являются точными
oneTenthApproxAsFloat = 0.100000001490116119384765625;
ulpOfoneTenthApproxAsFloat = Math.ulp(0.1f) = 7.450580596923828125E-9;
// Числовой диапазон, преобразуемый в float, ближайший к 0.1; границы _не_ включены
(oneTenthApproxAsFloat - ½ulpOfoneTenthApproxAsFloat, oneTenthApproxAsFloat + ½ulpOfoneTenthApproxAsFloat) =
(0.0999999977648258209228515625, 0.1000000052154064178466796875)

В частности, правильно округлённое преобразование из десятичной записи в двоичную любой строки, представляющей число в этом диапазоне, например выполняемое методом Float.parseFloat(String), даст одно и то же значение:

Float.parseFloat("0.0999999977648258209228515625000001"); // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.099999998");                          // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.1");                                  // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.100000001490116119384765625");        // exact conversion
Float.parseFloat("0.100000005215406417846679687");        // rounds down to oneTenthApproxAsFloat
Float.parseFloat("0.100000005215406417846679687499999");  // rounds down to oneTenthApproxAsFloat

Аналогично, подобный диапазон можно построить для типа double на основе точного значения приближения double к 0.1d и числового значения Math.ulp(0.1d), а также для других конкретных числовых значений типов float и double.

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

  • больше точного результата
  • равно точному результату
  • меньше точного результата
Значение с плавающей точкой не «знает», было ли оно получено округлением вверх, округлением вниз или точной операцией; оно не хранит историю вычислений. Следовательно, не следует ожидать, что сумма
0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f;
// Numerical value of computed sum: 1.00000011920928955078125,
// the next floating-point value larger than 1.0f, equal to Math.nextUp(1.0f).
или
0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d;
// Numerical value of computed sum: 0.99999999999999988897769753748434595763683319091796875,
// the next floating-point value smaller than 1.0d, equal to Math.nextDown(1.0d).
будет в точности равна 1.0; она может быть лишь близка к 1.0. Следовательно, следующий код представляет собой бесконечный цикл:
double d = 0.0;
while (d != 1.0) { // Surprising infinite loop
  d += 0.1; // Sum never _exactly_ equals 1.0
}
Вместо этого для циклов с заданным количеством итераций используйте целочисленный счётчик цикла:
double d = 0.0;
for (int i = 0; i < 10; i++) {
  d += 0.1;
} // Value of d is equal to Math.nextDown(1.0).
или проверяйте достижение предела числа с плавающей точкой с помощью операторов упорядоченного сравнения (<, <=, >, >=):
double d = 0.0;
while (d <= 1.0) {
  d += 0.1;
} // Value of d approximately 1.0999999999999999
Хотя арифметика с плавающей точкой может давать неожиданные результаты, она основана на продуманной системе принципов IEEE 754, и её поведение на платформе Java предсказуемо.
См. Спецификацию языка Java:
4.2.3 Типы и значения с плавающей точкой
4.2.4 Операции с плавающей точкой
15.21.1 Операторы числового равенства == и !=
15.20.1 Операторы числового сравнения <, <=, > и >=
Начиная с версии:
1.0
Внешние спецификации
  • Стандарт IEEE для арифметики с плавающей точкой
См. также:
  • Сериализованное представление

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

Модификатор и тип Поле Описание
static final int BYTES
Количество байтов, используемых для представления значения double, — 8.
static final int MAX_EXPONENT
Максимальная экспонента, которую может иметь конечная переменная double, — 1023.
static final double MAX_VALUE
Константа, содержащая наибольшее положительное конечное значение типа double: (2-2-52)·21023.
static final int MIN_EXPONENT
Минимальная экспонента, которую может иметь нормализованная переменная double, — -1022.
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 — 53.
static final int SIZE
Количество битов, используемых для представления значения double, — 64.
static final Class<Double> TYPE
Экземпляр Class, представляющий примитивный тип double.

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

Конструктор Описание
Double(double value)
Устарел.
Использование этого конструктора редко бывает уместным.
Double(String s)
Устарел.
Использование этого конструктора редко бывает уместным.

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

Модификатор и тип Метод Описание
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)
Возвращает представление заданного числа с плавающей точкой в соответствии с битовой раскладкой формата double IEEE 754.
static long doubleToRawLongBits(double value)
Возвращает представление заданного числа с плавающей точкой в соответствии с битовой раскладкой формата double 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, если аргумент является конечным числом с плавающей точкой; в противном случае (для аргументов NaN и бесконечности) возвращает false.
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.

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

clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
protected void finalize()
Устарел, будет удалён: этот элемент API планируется удалить в будущей версии.
Финализация устарела и планируется к удалению в будущем выпуске.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

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: 64.
Начиная с:
1.5
См. также:
  • Значения констант полей

PRECISION

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

MAX_EXPONENT

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

MIN_EXPONENT

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

BYTES

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

TYPE

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

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

Double

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

Double

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

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

toString

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

Примечание к API:
Этот метод соответствует общей функциональности операции convertToDecimalCharacter, определенной в IEEE 754; однако эта операция определяется через указание числа значащих цифр, используемых при преобразовании. В платформе Java код для такого преобразования включает точное преобразование double в BigDecimal с последующим округлением BigDecimal до нужного числа цифр; пример кода:
double d = 0.1;
int digits = 25;
BigDecimal bd = new BigDecimal(d);
String result = bd.round(new MathContext(digits,  RoundingMode.HALF_UP));
// 0.1000000000000000055511151
Параметры:
d — double, которое необходимо преобразовать.
Возвращает:
строковое представление аргумента.

toHexString

public static String toHexString(double d)
Возвращает шестнадцатеричное строковое представление аргумента double. Все упоминаемые ниже символы являются символами ASCII.
  • Если аргумент равен NaN, результатом является строка "NaN".
  • В противном случае результатом является строка, представляющая знак и модуль аргумента. Если знак отрицательный, первый символ результата — '-' ('\u002D'); если знак положительный, в результате не отображается символ знака. Что касается модуля m:
    • Если m — бесконечность, она представляется строкой "Infinity"; таким образом, положительная бесконечность дает результат "Infinity", а отрицательная бесконечность — "-Infinity".
    • Если m равен нулю, он представляется строкой "0x0.0p0"; таким образом, отрицательный ноль дает результат "-0x0.0p0", а положительный ноль — "0x0.0p0".
    • Если m — значение double с нормализованным представлением, для представления полей значащей части и показателя степени используются подстроки. Значащая часть представляется символами "0x1.", за которыми следует строчное шестнадцатеричное представление оставшейся части значащей части в виде дроби. Конечные нули в шестнадцатеричном представлении удаляются, если только все цифры не равны нулю; в этом случае используется один ноль. Затем показатель степени представляется символом "p", за которым следует десятичная строка смещенного показателя степени, как если бы она была получена вызовом Integer.toString для значения показателя степени.
    • Если m — значение double с субнормальным представлением, значащая часть представляется символами "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
Примечание к API:
Этот метод соответствует операции convertToHexCharacter, определенной в IEEE 754.
Параметры:
d — double, которое необходимо преобразовать.
Возвращает:
шестнадцатеричное строковое представление аргумента.
Начиная с:
1.5

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.

Обратите внимание, что завершающие спецификаторы формата, определяющие тип литерала с плавающей точкой (1.0f — значение float; 1.0d — значение double), не влияют на результат этого метода. Иными словами, числовое значение входной строки преобразуется непосредственно в целевой тип с плавающей точкой. Двухэтапная последовательность преобразований, из строки в float, а затем из float в double, не эквивалентна прямому преобразованию строки в double. Например, литерал float 0.1f равен значению 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
 }
Примечание к API:
Для интерпретации локализованных строковых представлений значений с плавающей точкой или строковых представлений с не-ASCII цифрами используйте NumberFormat. Например:
    NumberFormat.getInstance(l).parse(s).doubleValue();
где l — нужная локаль, либо Locale.ROOT, если локаль не должна учитываться. Этот метод соответствует операциям convertFromDecimalCharacter и convertFromHexCharacter, определенным в IEEE 754.
Параметры:
s — строка для разбора.
Возвращает:
объект Double, содержащий значение, представленное аргументом String.
Исключения:
NumberFormatException — если строка не содержит разбираемого числа.
См. также:
  • Проблемы преобразования из десятичной системы в двоичную и обратно

valueOf

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

parseDouble

public static double parseDouble(String s) throws NumberFormatException
Возвращает новый double, инициализированный значением, представленным указанным String, как это выполняется методом valueOf класса Double.
Параметры:
s — строка для разбора.
Возвращает:
значение double, представленное строковым аргументом.
Исключения:
NullPointerException — если строка равна null
NumberFormatException — если строка не содержит разбираемое значение double.
Начиная с:
1.2
См. также:
  • valueOf(String)
  • Проблемы преобразования из десятичной системы в двоичную и обратно

isNaN

public static boolean isNaN(double v)
Возвращает true, если указанное число является значением «не число» (NaN), и false в противном случае.
Примечание к API:
Этот метод соответствует операции isNaN, определенной в IEEE 754.
Параметры:
v — проверяемое значение.
Возвращает:
true, если значение аргумента равно NaN; в противном случае — false.

isInfinite

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

isFinite

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

isNaN

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

isInfinite

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

toString

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

byteValue

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

shortValue

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

intValue

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

longValue

public long longValue()
Возвращает значение этого Double как long после сужающего примитивного преобразования.
Указано в:
longValue в классе Number
Примечание к API:
Этот метод соответствует операции convertToIntegerTowardZero, определённой в IEEE 754.
Возвращает:
значение 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(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. Иными словами, для сравнения значений double используется эквивалентность представлений.
Переопределяет:
equals в классе Object
Примечание к API:
Этот метод определён через doubleToLongBits(double), а не через оператор == для значений double, поскольку оператор == не задаёт отношение эквивалентности, а для соблюдения контракта equals необходимо реализовать отношение эквивалентности; подробности см. в этом обсуждении сравнений и эквивалентности чисел с плавающей точкой.
Параметры:
obj — объект-ссылка, с которым выполняется сравнение.
Возвращает:
true, если этот объект совпадает с аргументом obj; в противном случае — false.
См. Спецификацию языка Java:
15.21.1 Операторы численного равенства == и !=
См. также:
  • doubleToLongBits(double)

doubleToLongBits

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

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

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

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

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

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

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

doubleToRawLongBits

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

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

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

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

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

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

Параметры:
value — число с плавающей точкой двойной точности double.
Возвращает:
биты, представляющие число с плавающей точкой.
С:
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 double с тем же битовым шаблоном, что и у аргумента 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>
Примечание к API:
Идиома полного порядка была включена в API Java SE ещё до появления такой функциональности в стандарте IEEE 754. Порядок предиката totalOrder, выбранный в IEEE 754, отличается от полного порядка, задаваемого этим методом. Этот метод рассматривает все представления NaN как принадлежащие одному классу эквивалентности, тогда как полный порядок IEEE 754 задаёт порядок на основе битовых шаблонов различных представлений NaN. Согласно порядку IEEE 754, «отрицательные» представления NaN, то есть представления NaN с установленным битом знака, меньше любого конечного или бесконечного значения, а также меньше любого «положительного» NaN. Кроме того, согласно порядку IEEE, все положительные значения NaN больше положительной бесконечности. Полные сведения о полном порядке см. в стандарте IEEE 754.
Параметры:
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))
Примечание к API:
Один из способов реализовать эквивалентность представлений для значений double:
Double.compare(a, b) == 0
Параметры:
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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, способы обхода проблем и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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.

Spec-Zone.ru

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