Jaki jest najlepszy sposób na przekształcenie podwójnego w długi bez rzucania?
Na przykład:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
java
type-conversion
Sanki
źródło
źródło
myLong == (long)(myDouble + 1)
gdziemyLong
równemyDouble
będą oceniaćtrue
Double.longValue();
) jest nadal przydatna, jeśli masz podwójne wartości z takich obiektów, jak tablica takich jak ta,ArrayList<Double>
ponieważ wystąpi błąd „nie można rzutować”. Mówię to tylko dla każdego, kto tu przyszedł i miał nieco inny problem.Odpowiedzi:
Zakładając, że jesteś zadowolony ze skrócenia do zera, po prostu użyj:
Będzie to szybsze niż przechodzenie przez klasy otoki - a co ważniejsze, jest bardziej czytelne. Teraz, jeśli potrzebujesz zaokrąglania innego niż „zawsze w kierunku zera”, potrzebujesz nieco bardziej skomplikowanego kodu.
źródło
... A oto sposób zaokrąglania, który się nie przycina. Pospiesz się, aby to sprawdzić w podręczniku Java API Manual:
źródło
Preferowanym podejściem powinno być:
Z dokumentacji Double (Java Platform SE 7) :
źródło
(new Double(d)).longValue()
wewnętrznie wykonuje rzutowanie, więc nie ma powodu, aby tworzyć obiekt Double.źródło
Biblioteka Guava Math ma specjalnie zaprojektowaną metodę konwersji podwójnego na długi:
Możesz użyć,
java.math.RoundingMode
aby określić zachowanie zaokrąglania.źródło
Jeśli masz poważne podejrzenia, że PODWÓJNIE jest WIELKIM, i chcesz
1) uzyskaj dojście do wartości DOKŁADNEJ jako DŁUGIE
2) wyrzucić błąd, jeśli nie jest DŁUGI
możesz spróbować czegoś takiego:
Long jest podzbiorem Double, więc możesz uzyskać dziwne wyniki, jeśli nieświadomie spróbujesz przekonwertować Double, który jest poza zasięgiem Long:
źródło
Long is a subset of Double
nie jest dokładne. Liczba cyfr znaczących dla Długiego jest większa niż Podwójna, dlatego niektóre informacje przechowywane w Długim mogą zostać utracone po przekształceniu w Podwójne. Przykład = tio.run/…Czy chcesz mieć konwersję binarną jak
źródło
Po prostu przez następujące:
źródło
Mówiąc prosto, rzutowanie jest bardziej wydajne niż tworzenie obiektu Double.
źródło