Spec-Zone.ru › OpenJDK 25

Класс 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 область можно вычислить следующим образом:
// Numeric values listed are exact values
oneTenthApproxAsFloat = 0.100000001490116119384765625;
ulpOfoneTenthApproxAsFloat = Math.ulp(0.1f) = 7.450580596923828125E-9;
// Numeric range that is converted to the float closest to 0.1, _excludes_ endpoints
(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, если аргумент является конечным числом с плавающей запятой; в противном случае возвращает 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.

Методы, объявленные в классе 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: 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
Устарел.
Использование этого конструктора редко бывает уместным. Для преобразования строки в примитив double используйте parseDouble(String), а для преобразования строки в объект Double — valueOf(String).
Создает новый объект 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, если аргумент является конечным значением с плавающей точкой; в противном случае (для аргументов NaN и бесконечность) возвращает false.
Примечание 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.
Переопределяет:
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>
Параметры:
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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Double.html

Spec-Zone.ru

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