# 1/3=0?



## guest (9. Aug 2007)

Wusstet Ihr, dass 1/3=0? Laut Java ist es:
Denn, wenn man 

double a = 1/3;
System.out.println(a);

eingibt, bekommt man 0.
WIESO?


----------



## Rock Lobster (9. Aug 2007)

Weil 1 eine Konstante ist, und wenn Du willst, daß die Konstante als Float oder Double behandelt wird, mußt Du das auch so angeben. Zum Beispiel:


```
double a = (double)1 / 3;
```

oder


```
double a = 1.0d / 3;
```

oder


```
double a = 1d / 3;
```

Mit float geht's genauso, nur halt mit (float) bzw. einem f hinten dran.


----------



## jPat (9. Aug 2007)

probier 1d/3d
Die lösung ist einfach:

1 ist vom typ integer,
3 ist auch vom typ integer.
ganzahldivision: 1/3 = 0

Also: 1d / 3d < das d gibt an, das es eine doublevaraiable ist. Kannst aber auch 1.0/3.0 rechnen ...


----------



## SlaterB (9. Aug 2007)

eher weil int/ int immer ganzzahlig gerechnet wird,
weniger weil 1 eine Konstante ist?!


----------



## Rock Lobster (9. Aug 2007)

Ja gut, nicht weils eine Konstante ist, aber weil konstante Zahlen grundsätzlich immer als int behandelt werden.

Für Sonderfälle muß man das halt entsprechend anpassen.

Es ist aber nicht nötig, 1d / 3d zu machen, weil das erstens für die Division nicht nötig ist, also rein mathematisch, und zweitens das Ergebnis sowieso immer an die vorhergehende Zahl angepaßt wird. Sprich, wenn man 1d / 3 teilt, wird auch alles, was in der Zeile noch so dranstehen mag, letztendlich auf ein double verrechnet.


----------



## bygones (9. Aug 2007)

1 ist keine konstante...

ach wurde schon gesagt dass durch int teilen ganzzahlig berechnet wird ?


----------



## Rock Lobster (9. Aug 2007)

1 ist keine Konstante? Was denn sonst?


----------



## SlaterB (9. Aug 2007)

naja, nicht mehr Konstante als double x = 1.0 es auch wäre, ein einfacher Wert

und mit dem double gings ja, also ist Konstante oder nicht irrelevant


----------



## Rock Lobster (9. Aug 2007)

Das habe ich weiter oben schon berichtigt -> weil es eine Konstante ist UND standardmäßig als int behandelt wird, wenn man es nicht explizit anders angibt.

EDIT: Noch klarer ausgedrückt: Der Schwerpunkt liegt natürlich nicht darauf, daß 1 eine Konstante ist und deswegen "konstanter" ist als ein 1.0d oder sowas - so sollte das nicht verstanden werden. Sondern weil allgemein Konstanten gekennzeichnet werden müssen, damit der Compiler weiß, wie er sie behandeln muß. So


----------



## Leroy42 (10. Aug 2007)

Rock Lobster hat gesagt.:
			
		

> weil konstante Zahlen grundsätzlich immer als int behandelt werden.


 :shock: 

Die Konstante 3.14159 wird in deinem Java also als _int behandelt_?



			
				Rock Lobster hat gesagt.:
			
		

> UND standardmäßig als int behandelt wird, wenn man es nicht explizit anders angibt.


 :shock: 
3.14159 wird also standardmäßig als int behandelt,_ wenn man es nicht anders angibt_?

Ja, wie soll man es denn anders angeben?  ???:L 



			
				Rock Lobster hat gesagt.:
			
		

> Sondern weil allgemein Konstanten gekennzeichnet werden müssen, _damit der Compiler weiß, wie er sie behandeln muß._ So



 :shock:  :shock:  :shock: 
So langsam redest du dich hier um Kopf und Kragen...


----------



## SlaterB (10. Aug 2007)

da du das so schreibst, als würdest du es nicht nur kritisieren, sondern auch nicht kapieren (  ), gemeint ist:
Konstanten der Form [0-9]+ werden grundsätzlich als int gezählt,
wenn man sie anders haben will muss man sie anders markieren (z.B. d hinten dran)


----------



## Rock Lobster (10. Aug 2007)

@ Leroy: Jaja, reite halt auf meiner schlechten Wortwahl rum... "anders" angeben, vielleicht wäre "explizit" angeben besser gewesen.

Wenn ich EXPLIZIT angebe, daß ich das Ding als Float behandelt haben will - sei es durch einen Punkt, einen Cast, oder ein f hinten dran (gleiches gilt analog für Double (mit einem d hinten dran, um es exakt zu formulieren)) - dann weiß der Compiler, was ich will und kompiliert entsprechend.

Wenn ich KEINEN Punkt angebe, und KEINEN Cast, und KEIN f hinten dran (und auch kein d und auch kein L), dann geht er davon aus, daß ich wohl einen int meine.

Ich hoffe das war jetzt deutlich genug...


----------



## SlaterB (10. Aug 2007)

> Wenn ich KEINEN Punkt angebe, und KEINEN Cast, und KEIN f hinten dran (und auch kein d und auch kein L), dann geht er davon aus, daß ich wohl einen int meine. 

um es Leroy42 vorwegzunehmen:

3.14 ohne f, d oder l ist immer noch kein int 
(ich habe dich aber verstanden, siehe mein vorheriges Post kurz vor deinem)

edit: ok, 'KEINEN Punkt' schließt 3.14 aus


----------



## Leroy42 (10. Aug 2007)

SlaterB hat gesagt.:
			
		

> Konstanten der Form [0-9]+ werden grundsätzlich als int gezählt,



Na, das ist doch mal eine sinnvolle und verständliche Aussage!   



			
				Rock Lobster hat gesagt.:
			
		

> Ich hoffe das war jetzt deutlich genug...



Jetzt ja!   

Darfst dich jetzt aufs Wochenende vorbereiten.


----------



## Rock Lobster (10. Aug 2007)

Da vergeß ich wieder alles und verliere all meine sprachlichen Fähigkeiten...


----------



## jPat (10. Aug 2007)

int i = 1234567890123456778901234567890;

wirklich ein int ??


----------



## SlaterB (10. Aug 2007)

> dann geht er davon aus, daß ich wohl einen int meine. 

der Compiler erkennt nicht mal ein long automatisch, 
ob er i als int auch akzeptiert ist eine andere Frage


----------



## Leroy42 (10. Aug 2007)

Rock Lobster hat gesagt.:
			
		

> _und verliere all meine sprachlichen Fähigkeiten_...



Das kenne ich selbst nur zu gut!  :shock:    

Vielleicht sollte ich Samstags weniger saufen?  ???:L


----------



## Rock Lobster (10. Aug 2007)

@jPat: Mein Compiler (der von eclipse) sieht sowas aber gar nicht gern und verlangt, daß ich ein L hinten anhänge...


----------

