1/3=0?

Status
Nicht offen für weitere Antworten.
G

guest

Gast
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

Bekanntes Mitglied
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:

Code:
double a = (double)1 / 3;

oder

Code:
double a = 1.0d / 3;

oder

Code:
double a = 1d / 3;

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

jPat

Bekanntes Mitglied
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 ...
 
S

SlaterB

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

Rock Lobster

Bekanntes Mitglied
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.
 
B

bygones

Gast
1 ist keine konstante...

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

SlaterB

Gast
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

Bekanntes Mitglied
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

Top Contributor
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... :cool:
 
S

SlaterB

Gast
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

Bekanntes Mitglied
@ 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...
 
S

SlaterB

Gast
> 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
 
S

SlaterB

Gast
> 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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben