Sposób na przejscie z double do int

Sposób na przejscie z double do int
VI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:2
0

Witam, jeżeli powtarzam temat który już był albo ktoś już na to wpadł to przepraszam :P

ok! oto coś fajnego... popatrzcie!
normalnie jak przechodziło się z double do int to gubiło się końcówkę. i tak np. 4,67 to 4 a nie 5.
Dlatego opracowałem sposób by normalnie zaokrąglało. Wystarczy dodać do doubla 1/2 i wtedy normalnie będzie przechodziło.

Kopiuj
 double dwaitrzyczwarte = 2.75;
double przejscie = dwaitrzyczwarte + 0.5;
    int liczba=(int)przejscie;
System.out.println("niezaokraglona: "+dwaitrzyczwarte+", zaokraglona: "+liczba);
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:3 minuty
0

java.lang.Math.round


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
0

Ale ten sposób jest mniej więcej tak stary jak świat i chyba znają go wszyscy którzy kiedykolwiek operowali na liczbach niecałkowitych...

__krzysiek85
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 9 lat
  • Postów:1019
0

Z ciekawości spojrzałem na implementację Math.round w OpenJDK 6 i 7.

W obu przypadkach metoda round zawiera odwołanie do StrictMath.floor.
W JDK 6 jest to natywna metoda, a w 7 jest napisana w Javie i wykonuje kilkadziesiąt kolejnych operacji.
Jeżeli zależy Wam na wydajności i zaokrąglenie nie musi być zawsze takie same na wszystkich architekturach, to lepiej napisać własną metodę, która będzie robić "(int) (d + 0.5)"

http://www.docjar.com/html/api/java/lang/Math.java.html
http://www.docjar.com/html/api/java/lang/StrictMath.java.html


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
Olamagato
Może zrobiono tak po prostu dlatego, że zaokrąglanie w Javie 6 nie jest przenośne? Nieprzenośne zaokrąglanie przydaje się tylko tam gdzie jego jakość nie ma znaczenia - ale w takich przypadkach użycie arytmetyki double i tak najczęściej jest strzelaniem z armaty do muchy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.