Runden - x/100 liefert long zurück

Status
Nicht offen für weitere Antworten.

oetzi

Bekanntes Mitglied
Hallo zusammen,

ich machs kurz.
Warum liefert mir der Code hier:
Java:
        a = 90.0;

        System.out.println("a:"+a);
        b = (a/55);
        System.out.println("a/55:"+b);
        b = b * 100;
        System.out.println("*100:"+b);
        b = (Math.round(b))/100;

diesen Fehler:
found : long
required: java.lang.Double

okay, Math.round() liefert mir nen long Wert, aber wenn ich den durch 100 rechne, müsste doch eigentlich ein double bei raus kommen oder?

was ist mein Denkfehler hier?

Gruß
oetzi
 
Zuletzt bearbeitet:

oetzi

Bekanntes Mitglied
Nabend Michael,

mhpf, habe quasi zufällig, als ich dir gerade antworten wollte, den Fehler gefunden.
ich hatte a und b bis jetzt als "Double" statt als "double" deklariert.
Jetzt muss ich doch direkt mal fragen wo da der Unterschied ist.
Ich dachte die Klasse Double wäre nur eine Art Wrapper für den primitiven Datentyp, der mir ein paar Methoden zur Verfügung stellt?!?

Naja, und eine Sache funktioniert leider immer noch nicht.
Hier mal der aktuelle Code:

Java:
package testapp;

public class Main {

    public static void main(String[] args) {

        double a,b;
        a = 90.0;

        System.out.println("a:"+a);
        b = (a/55);
        System.out.println("a/55:"+b);
        b = b * 100;
        System.out.println("*100:"+b);
        b = Math.round(b);
        System.out.println("round:"+b);
        b = (b/100);
        System.out.println("/100:"+b);
        
        double c = 90.0;        
        System.out.println("direkt:"+(Math.round((c/55)*100))/100);
    }

}

Die Ausgabe sieht so aus:
a:90.0
a/55:1.6363636363636365
*100:163.63636363636365
round:164.0
/100:1.64 <-- Das soll rauskommen
direkt:1 <-- warum ist das = 1??

Warum liefert mir die letzte Zeile eine 1 statt der 1.64??
Ich habe jetzt mehrmals die Klammern überprüft. Übersehe ich da irgendwas?

Gruß
oetzi
 

AmunRa

Gesperrter Benutzer
wenn du /100.0 machst kommt auch ein Komma zahl raus.



Wie du sagst ist der Rückgabetyp von Math.round ein Long.

wenn du einen Long durch einen Int dividierst kommt wieder ein Int bzw. long zurück daher 1

wenn du aber einen double durch einen int dividierst kommt ein double zurück. oder du machst 100 zu 100.0 so ist dies dann auch ein double
 

oetzi

Bekanntes Mitglied
Morgen AmunRa,

danke für die Erklärung.

Trotzdem muss ich gestehen, dass ich nicht ganz verstehe, warum die Zeilen 12-19 was anderes liefern wie die Zeile 22. Hatte ja einfach probiert alles hintereinander zu packen.

mhh, kann der Grund dafür sein, dass in Zeile 16 ein "stilles" Typcasting stattfindet? Man sieht ja in der Ausgabe, dass Zeile 17 "round:164.0" zurück gibt, obwohl ich in Zeile 16 ein Long zurück kriege.

Naja, auf jedenfall funktioniert es, wenn ich /100.0 rechne.

Schönen Gruß

oetzi

PS: Die Frage aus dem letzten Post war noch offen bzgl. des Unterschieds zwischen der KLasse Double und dem primitiven Datentyp double.

EDIT: typo
 
Zuletzt bearbeitet:

Michael...

Top Contributor
mhh, kann der Grund dafür sein, dass in Zeile 16 ein "stilles" Typcasting stattfindet? Man sieht ja in der Ausgabe, dass Zeile 17 "round:164.0" zurück gibt, obwohl ich in Zeile 6 ein Long zurück kriege.
b ist als double deklariert und kann ohne Probleme int und long entgegennehmen (mit eventuellem Genauigkeitsverlust) umgekehrt ist das eher schwieriger und eine Ganzzahl wird als Double mit x.0 dargestellt.
PS: Die Frage aus dem letzten Post war noch offen bzgl. des Unterschieds zwischen der KLasse Double und dem primitiven Datentyp double.
Die Antwort steckt ja schon in der Frage double ist ein primitiver Datentyp der nichts anderes kann als einen 64bit double Wert zu speichern. Double ist eine Klasse, die zum einen statische Methoden zum umgang mit double Werten bieten, zum anderen können Double Objekte instanziert werden, die intern einen double Wert speichern:
Double (Java 2 Platform SE 5.0)
 
S

Spacerat

Gast
...ich in Zeile 6 ein Long zurück kriege
...Du meinst Zeile 16, nw? b ist als double deklariert und wird deswegen auch wieder ein double, selbst wenn was anderes zurückgegeben wird.
In der Zeile 22 wird das zurückgegebene long aber nirgendwo mehr einem double zugewiesen, daher wird long verwendet und das Ergebnis ist dann auch ein long, weil keine weiteren Flieskommazahlen in die Rechnung einfliessen.
Double ist tatsächlich "nur" ein Wrapper für double. Da [c]Math.round()[/c] stets ein long liefert, welches im 1. Beispiel einer Variable des Typs Double, also einem Objekt, zugewiesen wird muss "geboxed" werden. Per Auto-Boxing wird aus dem zurückgegebenen long ein Long statt ein Double, welches sich nicht mehr in ein Double casten lässt.
 
Zuletzt bearbeitet von einem Moderator:

oetzi

Bekanntes Mitglied
dank euch für eure Erklärungen!
Jetzt ist mir alles klar.

@spacerat:
Sehr interessant Erklärung zu der Double/double Frage.
Das gibt mir einen kleinen Einblick hinter die Kulissen :)

Schönen Gruß und schomal ein schönes Wochenende!

oetzi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Klasse in Runden Klammern bei Objektimplementierung Java Basics - Anfänger-Themen 4
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
S Runden von Zahlen Java Basics - Anfänger-Themen 1
J Fehler beim Runden Java Basics - Anfänger-Themen 3
T ungewolltes Runden Java Basics - Anfänger-Themen 5
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kaufmännisches Runden mit BigDecimal Java Basics - Anfänger-Themen 14
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
F Zeiteinheit auf ganze Zahl runder runden Java Basics - Anfänger-Themen 4
L Nachkommastellen Runden, Problem mit Syntax " }" Java Basics - Anfänger-Themen 2
J Auf den nächsten Zehner runden? Java Basics - Anfänger-Themen 4
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
A Richtig runden Java Basics - Anfänger-Themen 9
M Double-Zahlen auf Intervalle runden Java Basics - Anfänger-Themen 3
H Runden klappt nicht Java Basics - Anfänger-Themen 10
S Zahlen runden Java Basics - Anfänger-Themen 5
E Runden Java Basics - Anfänger-Themen 2
U Erste Schritte Kommazahl runden Java Basics - Anfänger-Themen 17
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
Luk10 Nachkommastellen runden Java Basics - Anfänger-Themen 2
S Runden eines doubles auf n nachkommastellen Java Basics - Anfänger-Themen 10
H Zahl auf 2 nachkomma stellen runden Java Basics - Anfänger-Themen 13
M Float auf bestimmte Nachkommazahl runden Java Basics - Anfänger-Themen 3
I Runden / Zweikommastellen geht nicht... Java Basics - Anfänger-Themen 3
J Konvertieren und Runden von double in int Java Basics - Anfänger-Themen 3
H Datentypen Rechnen und Runden Java Basics - Anfänger-Themen 2
T Runden mit Präzision vs. Runden mit Nachkommastellen Java Basics - Anfänger-Themen 4
J Runden mit printf Java Basics - Anfänger-Themen 3
-horn- Runden auf x-Stellen wirklich nur so umständlich? Java Basics - Anfänger-Themen 9
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
Rika Runden Java Basics - Anfänger-Themen 6
F Werte runden Java Basics - Anfänger-Themen 11
N Runden Java Basics - Anfänger-Themen 6
J Runden auf 2 Nachkommastellen ? Java Basics - Anfänger-Themen 5
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
J richtig runden Java Basics - Anfänger-Themen 4
B Double je nach Nachkommastellen kfm runden Java Basics - Anfänger-Themen 7
J Runden Java Basics - Anfänger-Themen 4
G divisions ergebnis runden Java Basics - Anfänger-Themen 3
P Runden auf eine Nachkommastelle Java Basics - Anfänger-Themen 18
S Wie runden man noch mal auf bestimmte stellen? Java Basics - Anfänger-Themen 8
S double runden Java Basics - Anfänger-Themen 5
W Runden Java Basics - Anfänger-Themen 10
G Durch Liste iterieren und nachkommastellen runden Java Basics - Anfänger-Themen 9
C Ergebnisse auf 2 Kommastellen runden Java Basics - Anfänger-Themen 3
R Zahl runden Java Basics - Anfänger-Themen 18
M Runden eines Doublewerts auf 13 Zeichen Java Basics - Anfänger-Themen 10
A Runden Java Basics - Anfänger-Themen 5
G Kein Runden Java Basics - Anfänger-Themen 3
R "Kaufmännisch runden" Java Basics - Anfänger-Themen 12
P Automatisch auf die nächst höere zahl runden? Java Basics - Anfänger-Themen 7
F Long umwandeln und auf 2 Dezimalen runden? Java Basics - Anfänger-Themen 14
M runden Java Basics - Anfänger-Themen 9
D Einmal Runden ohne alles Java Basics - Anfänger-Themen 7
P Dezimalstellen limitieren (runden auf 2 Stellen) Java Basics - Anfänger-Themen 3
L Automatischen Runden oder Abschneiden? Java Basics - Anfänger-Themen 2
C Runden auf 2 Nachkommastellen klappt nicht||| WARUM Java Basics - Anfänger-Themen 13
S Double runden funktioniert nicht immer ? Java Basics - Anfänger-Themen 2
O Dezimal in Dual...Arraygröße & Runden Java Basics - Anfänger-Themen 4
A Bestimmt blöde Frage: Zahl runden Java Basics - Anfänger-Themen 10
K Fliesskommawert runden Java Basics - Anfänger-Themen 3
L Runden Java Basics - Anfänger-Themen 2
G Zahlen runden Java Basics - Anfänger-Themen 3
C double runden Java Basics - Anfänger-Themen 6
V Double runden Java Basics - Anfänger-Themen 6
D Zahlen runden Java Basics - Anfänger-Themen 10
F double wert formatieren und runden Java Basics - Anfänger-Themen 7
C Runden einer Altersangabe Java Basics - Anfänger-Themen 5
P double Zahl runden Java Basics - Anfänger-Themen 2
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
G Methode liefert "Min@15db9742" als Ausgabe Java Basics - Anfänger-Themen 2
Joker4632 Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert Java Basics - Anfänger-Themen 6
J Kosinussatz liefert falschs Ergebnis Java Basics - Anfänger-Themen 2
J Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
E Methoden Methode liefert keinen Wert zurück Java Basics - Anfänger-Themen 16
Anfänger2011 file.isDirectory() liefert falschen Wert!? Java Basics - Anfänger-Themen 1
B Rechnung ohne Klammer liefert komisches Ergebniss Java Basics - Anfänger-Themen 3
D Operatoren IF Abfrage liefert falsches Ergebnis Java Basics - Anfänger-Themen 4
U ArrayList.get() liefert falsches Ergebnis Java Basics - Anfänger-Themen 4
L replaceAlll liefert Exception... Java Basics - Anfänger-Themen 3
M System.getProperty("java.vm.version") liefert build-Version Java Basics - Anfänger-Themen 4
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
F charAt-Methode liefert falsche Unicode-Werte Java Basics - Anfänger-Themen 8
P Map liefert bei put null als Ergebnis Java Basics - Anfänger-Themen 6
A contains bzw. indexOf liefert keine Treffer? Java Basics - Anfänger-Themen 3
M Problem mit getter, liefert nur alte Werte Java Basics - Anfänger-Themen 6
F arraylist.get() liefert Speicheradresse?!? Java Basics - Anfänger-Themen 2
R If-Abfrage liefert false zurück, wieso ? Java Basics - Anfänger-Themen 20
L Woerterbuch liefert immer "null" Java Basics - Anfänger-Themen 41
R warum liefert ein und dieselbe funktion nicht dasselbe return?? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben