Teilen mit Rest

Status
Nicht offen für weitere Antworten.

FelixII

Mitglied
Hallo,

ich arbeite seit ca. 2 Woche mit Java und hab eine kleine Frage, die sich sicherlich schnell beantworten lässt. Folgender Code:

Java:
public class Rechnen {

	public static void main(String[] args)
	{
		int zahl1 = 13;
		int zahl2 = 10;
		
		float ergebnis = zahl1/zahl2;
		
		System.out.println(ergebnis);
	}
}

Als Ergegnis hätte ich eigentlich 1.3 erwartet, stattdessen wird 1.0 ausgegeben. Ich hab schon probiert den zwei Variablen "zahl1" und "zahl" auch den Datentyp float zu geben, dann gehts auch, aber ich weiß nicht warum. Könnte mir bitte jemand beschreiben, wie der Computer hier vorgeht und warum er 1.0 ausgibt?

Danke für eure Hilfe!

MfG
FelixII
 

javimka

Top Contributor
der Typ int repräsentiert nur ganze Zahlen, also {1,2,3,4,.... , 2 Mrd}
Float hingegen hat eine andere interne Struktur und kann rationale Zahlen darstellen.
Wenn du ein int durch einen int teilst, dann wird abgerundet und hier wird das gerundete Resultat erst dann in ein float umgewandelt.
 

FelixII

Mitglied
Ok, das mit den Variablentypen ist mir schon klar, dachte nur dass er intern mit der Kommazahl rechnet und nur abrunden würde, wenn er das Ergebnis in eine int-Variable pressen müsste.

Danke!

EDIT: Ah ok, das mit dem "casten" hab ich zwar noch nicht behandelt, aber klappt gut;)
 

eRaaaa

Top Contributor
Ok, das mit den Variablentypen ist mir schon klar, dachte nur dass er intern mit der Kommazahl rechnet und nur abrunden würde, wenn er das Ergebnis in eine int-Variable pressen müsste.

naja, das kann man ja schnell selbst überprüfen
Java:
 System.out.println(zahl1/zahl2);

da wird ja das ergebnis nirgends "reingepresst" und man versteht vllt eher, wieso dann 1.0 rauskommt :)
 

Tharsonius

Bekanntes Mitglied
Java:
int zahl1 = 13;
int zahl2 = 10;
	
float ergebnis = zahl1/zahl2;

Könnte mir bitte jemand beschreiben, wie der Computer hier vorgeht und warum er 1.0 ausgibt?

Java wird die Rechnung und die Zuweisung schrittweise vornehmen. Dabei wird zuerst die Division gebildet.
Dass das Ergebnis später in einer float Variablen landet ist dabei erst einmal egal. Der Compiler betrachtet als ersten Schritt lediglich die Division und dabei sind lediglich Integer beteiligt. Ergo wird die Division als Integer Division durchgeführt. 13/10 ist nunmal 1.

Als zweiten Schritt wird das Rechenergebnis der Variablen ergebnis zugewiesen. Jetzt erst stellt der Compiler fest, dass die Typen nicht passen und wandelt das Rechenergebnis in float. So wird aus 1 eine 1.0


Wie oben bereits beschrieben ist die Abhilfe, die Division bereits zu einer Float-Division zu machen. Und das macht man mittels casting einer der beiden Variablen.


Eine Rechnung wird immer abhängig von den beteiligten Typen vorgenommen. Dazu werden, wenn beide nicht gleich sind, immer der kleinere in den größeren gewandelt. Wichtig ist dabei, dass Java grundlegend von links nach rechts auflöst, wenn es um gleiche Priorität handelt.

Bei a+b+c beispielsweise wird zuerst a+b gebildet und danach erst wird c aufaddiert.

Edit: Kleinen aber entscheidenden Fehler korrigiert.
 
Zuletzt bearbeitet:

Tharsonius

Bekanntes Mitglied
Der Cast müsste schneller sein, weil da nur beide Werte gewandelt werden und dann eine Division durchgeführt wird.
Bei der Multiplikation müssen ebenfalls beide Werte gewandelt werden, eine Division durchgeführt werden und eine Multiplikation zusätzlich.


Schöner finde ich persönlich den cast, weil es meiner Meinung nach den Code übersichtlicher macht.

Wobei, wenn ich feste Werte habe, dann erstelle ich gar nicht erst 2 Variablen dafür, ich trage die Werte oder das Ergebnis direkt ein.
 

FelixII

Mitglied
Java wird die Rechnung und die Zuweisung schrittweise vornehmen. Dabei wird zuerst die Division gebildet.
Dass das Ergebnis später in einer float Variablen landet ist dabei erst einmal egal. Der Compiler betrachtet als ersten Schritt lediglich die Division und dabei sind lediglich Integer beteiligt. Ergo wird die Division als Integer Division durchgeführt. 13/10 ist nunmal 1.

Als zweiten Schritt wird das Rechenergebnis der Variablen ergebnis zugewiesen. Jetzt erst stellt der Compiler fest, dass die Typen nicht passen und wandelt das Rechenergebnis in float. So wird aus 1 eine 1.0


Wie oben bereits beschrieben ist die Abhilfe, die Division bereits zu einer Float-Division zu machen. Und das macht man mittels casting einer der beiden Variablen.


Eine Rechnung wird immer abhängig von den beteiligten Typen vorgenommen. Dazu werden, wenn beide nicht gleich sind, immer der kleinere in den größeren gewandelt. Wichtig ist dabei, dass Java grundlegend von links nach rechts auflöst, wenn es um gleiche Priorität handelt.

Bei a+b+c beispielsweise wird zuerst a+b gebildet und danach erst wird c aufaddiert.

Edit: Kleinen aber entscheidenden Fehler korrigiert.

Ok, jetzt ist alles klar, vielen Dank!:)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Teilen ohne Rest Java Basics - Anfänger-Themen 15
H Schleife für Teilen mit Rest Java Basics - Anfänger-Themen 1
J Boolean[] teilen Java Basics - Anfänger-Themen 13
O Datentypen String teilen Java Basics - Anfänger-Themen 5
A Teilen eines Arrays Java Basics - Anfänger-Themen 5
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
M Suchfunktion schon bei Teilen des Wortes Java Basics - Anfänger-Themen 4
F Wie String in unterschiedliche Listen teilen Java Basics - Anfänger-Themen 7
R Image Teilen Java Basics - Anfänger-Themen 3
V Durch 0 teilen Java Basics - Anfänger-Themen 2
I String teilen und zwei Wörter generieren Java Basics - Anfänger-Themen 1
A Text teilen und Wörter zählen Java Basics - Anfänger-Themen 7
T Android Display in 4 teilen... Java Basics - Anfänger-Themen 3
H Datei in kleine Stücke teilen und wieder erkennen Java Basics - Anfänger-Themen 10
C Durch 0 teilen Java Basics - Anfänger-Themen 11
turmaline String teilen in gleich große strings Java Basics - Anfänger-Themen 15
N TextZeile in einzelne Strings teilen, die mit Komma getrennt sind Java Basics - Anfänger-Themen 4
X Quersumme ganzzahlig teilen problem Java Basics - Anfänger-Themen 9
S Zeichenketten teilen Java Basics - Anfänger-Themen 13
A Fahrzeug ID in substrings teilen und abgleichen Java Basics - Anfänger-Themen 9
M Ganzzahlig teilen Java Basics - Anfänger-Themen 1
Guybrush Threepwood String in alle möglichen Fragmente teilen Java Basics - Anfänger-Themen 2
A eingelesene String in buchstaben teilen Java Basics - Anfänger-Themen 9
X String teilen Java Basics - Anfänger-Themen 1
D String mit split teilen und leere Felder behalten Java Basics - Anfänger-Themen 4
G Array rekursiv teilen und aufsummieren Java Basics - Anfänger-Themen 9
K Durch 0 teilen Java Basics - Anfänger-Themen 4
F Teilen einer großen Grafik Java Basics - Anfänger-Themen 2
D String teilen die x-te Java Basics - Anfänger-Themen 13
K Durch null teilen?? Java Basics - Anfänger-Themen 3
M Rest mit Spring boot oder selbst anlegen Java Basics - Anfänger-Themen 14
M Rest- Api mit HTTP BASIC Authentication Java Basics - Anfänger-Themen 16
I REST Api / JAX-RS, Swagger (OpenAPI) - generelle Starthilfen benötigt Java Basics - Anfänger-Themen 15
tom.j85 Externe Rest API konsumieren Java Basics - Anfänger-Themen 9
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
R Warum werden hier nur die grün und orangen Linien ausgegeben und der Rest unten nicht? Java Basics - Anfänger-Themen 5
D NodeJS Rest Api Erkläre Java Basics - Anfänger-Themen 3
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
J XML-Strukturen für REST-Service erstellen Java Basics - Anfänger-Themen 1
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
D Rest ausrechnen Java Basics - Anfänger-Themen 2
J division mit rest Java Basics - Anfänger-Themen 8
O JRadioButton's - Einen aktivieren/ Rest deaktivieren Java Basics - Anfänger-Themen 5
M Rest herausfinden Java Basics - Anfänger-Themen 2
J Rest einer Zahl herausfinden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben