1. Обзор
В этом руководстве мы рассмотрим различные методы преобразования двойного значения
в длинное
в Java.
2. Использование приведения типов
Давайте проверим простой способ приведения double
к long
с помощью оператора cast:
Assert.assertEquals(9999, (long) 9999.999);
Применение оператора (длинного)
приведения к двойному
значению 9999,999 приводит к 9999.
Это сужающее примитивное преобразование , потому что мы теряем точность. Когда double
приводится к long
, результат останется тем же, за исключением десятичной точки.
3. Использование Double.longValue
Теперь давайте изучим встроенный метод longValue Double
для
преобразования double
в long
:
``
Assert.assertEquals(9999, Double.valueOf(9999.999).longValue());
Как мы видим, применение метода longValue к
двойному
значению 9999,999 дает 9999. Внутри метод longValue
выполняет простое приведение типов .
4. Использование математических
методов
Наконец, давайте посмотрим, как преобразовать double
в long
, используя методы round, ceil и floor
из класса Math :
Давайте сначала проверим Math.round.
Это дает значение, ближайшее к аргументу:
Assert.assertEquals(9999, Math.round(9999.0));
Assert.assertEquals(9999, Math.round(9999.444));
Assert.assertEquals(10000, Math.round(9999.999));
Во- вторых, мат.
ceil
выдаст наименьшее значение, которое больше или равно аргументу:
Assert.assertEquals(9999, Math.ceil(9999.0), 0);
Assert.assertEquals(10000, Math.ceil(9999.444), 0);
Assert.assertEquals(10000, Math.ceil(9999.999), 0);
С другой стороны, Math.floor
делает прямо противоположное Math.ceil.
Это возвращает наибольшее значение, которое меньше или равно аргументу:
Assert.assertEquals(9999, Math.floor(9999.0), 0);
Assert.assertEquals(9999, Math.floor(9999.444), 0);
Assert.assertEquals(9999, Math.floor(9999.999), 0);
Обратите внимание, что и Math.ceil
, и Math.round
возвращают двойное
значение, но в обоих случаях возвращаемое значение эквивалентно длинному
значению.
5. Вывод
В этой статье мы обсудили различные методы преобразования double
в long
в Java. Желательно иметь представление о том, как ведет себя каждый метод, прежде чем применять его к критически важному коду.
Полный исходный код этого руководства доступен на GitHub .