«1. Обзор

В этом уроке мы рассмотрим различные методы преобразования double в long в Java.

2. Использование приведения типов

Давайте проверим простой способ приведения типа double к типу long с помощью оператора приведения:

Assert.assertEquals(9999, (long) 9999.999);

Применение оператора (длинного) приведения к значению типа double 9999,999 приводит к результату 9999. ~ ~~ Это сужающее примитивное преобразование, потому что мы теряем точность. Когда двойное число приводится к длинному, результат останется прежним, за исключением десятичной точки.

3. Использование Double.longValue

Теперь давайте рассмотрим встроенный метод longValue класса Double для преобразования типа double в тип long:

Как мы видим, применение метода longValue к значению типа double 9999,999 дает 9999. Внутри метод longValue выполняет простое приведение типов.

Assert.assertEquals(9999, Double.valueOf(9999.999).longValue());

4. Использование математических методов

Наконец, давайте посмотрим, как преобразовать double в long с помощью методов round, ceil и floor из класса Math:

Давайте сначала проверим Math.round. Это дает значение, ближайшее к аргументу:

Во-вторых, Math.ceil выдаст наименьшее значение, которое больше или равно аргументу:

Assert.assertEquals(9999, Math.round(9999.0));
Assert.assertEquals(9999, Math.round(9999.444));
Assert.assertEquals(10000, Math.round(9999.999));

С другой стороны, Math.floor делает прямо противоположно Math.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.ceil, и Math.round возвращают двойное значение, но в обоих случаях возвращаемое значение эквивалентно длинному значению. .

Assert.assertEquals(9999, Math.floor(9999.0), 0);
Assert.assertEquals(9999, Math.floor(9999.444), 0);
Assert.assertEquals(9999, Math.floor(9999.999), 0);

5. Заключение

В этой статье мы обсудили различные методы преобразования double в long в Java. Желательно иметь представление о том, как ведет себя каждый метод, прежде чем применять его к критически важному коду.

Полный исходный код этого руководства доступен на GitHub.

«