Каков наилучший способ конвертировать двойное в длинное без приведения?
Например:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
java
type-conversion
санки
источник
источник
myLong == (long)(myDouble + 1)
где будутmyLong
равныmyDouble
true
Double.longValue();
) все еще полезен, если у вас есть двойные значения из таких вещей, как arraylist, как это,ArrayList<Double>
так как вы получите ошибку не могу привести. Я просто говорю это для тех, кто приехал сюда и имел немного другую проблему.Ответы:
Предполагая, что вы довольны усечением до нуля, просто приведите:
Это будет быстрее, чем проходить через классы-обертки, и, что более важно, это более читабельно. Теперь, если вам нужно округление, отличное от «всегда к нулю», вам понадобится немного более сложный код.
источник
... А вот способ округления, который не усекается. Поспешил посмотреть это в Java API Manual:
источник
Предпочтительный подход должен быть:
Из документации Double (Java Platform SE 7) :
источник
(new Double(d)).longValue()
внутренне просто выполняет приведение, поэтому нет причин создавать объект Double.источник
В библиотеке Guava Math есть метод, специально разработанный для преобразования двойного в длинное:
Вы можете использовать,
java.math.RoundingMode
чтобы указать поведение округления.источник
Если у вас есть сильное подозрение, что ДВОЙНОЙ на самом деле долго, и вы хотите
1) получить указатель на его точное значение как долгое
2) выбросить ошибку, когда это не долго
Вы можете попробовать что-то вроде этого:
Long - это подмножество Double, поэтому вы можете получить некоторые странные результаты, если неосознанно попытаетесь конвертировать Double вне диапазона Long:
источник
Long is a subset of Double
не является точным. Число значащих цифр для Long больше Double, поэтому некоторая информация, хранящаяся в Long, может быть потеряна при преобразовании в Double. Пример = tio.run/…Это противоположно тому, что спрашивают, но, тем не менее, это может оказаться полезным для других:
источник
Просто следующим:
источник
Проще говоря, приведение более эффективно, чем создание объекта Double.
источник