Wieso kann man nicht dividieren?

Status
Nicht offen für weitere Antworten.

philipp

Mitglied
Hi
Also folgender Code:

Code:
double ergebniss;
ergebniss = (5/3)*100;
System.out.println(ergebniss);

ER gibt mit immer 100 aus, obwohl 5/3*100 ja ungefähr 166 sein müssten. ich hab extra schon ne double variabel genommen, weil ich dachte er braucht dafüt ja auch kommazahlen.
was hab ich denn falsch gemacht?
 
Code:
public class Div 
{	
	public static void main(String args[])
	{
		double ergebnis;
		ergebnis = (5.0/3.0) * 100.0;
		System.out.println(ergebnis);
	}
	
}
 
philipp hat gesagt.:
was hab ich denn falsch gemacht?

Vorher zuviel in PHP programmiert?

In Java (C, C++, ...) wird strikt zwischen Ganzzahl- und Fließkomma-Berechnungen
unterschieden:

Zuerst wird der gesamte, rechts von dem Gleichheitszeichen stehende, Ausdruck -
genauer jeder Teilausdruck - in der Form des höchsten Zahlentyps
(in diesem Fall Integer) ausgerechnet.

Erst danach wird auf double erweitert.

Lösungen:

Code:
ergebniss = (5.0/3) * 100;
Code:
ergebniss = (5/3.0) * 100;
Code:
ergebniss = ((double) 5/3) * 100;
 
Grundkenntnisse der Integerarithmetik sind oft hilfreich.

"5 / 3 * 100" ergibt 1 * 100 = 100
"5 * 100 / 3" ergibt 500/3 = 166

Oder um es mal mathematisch auszudrücken: Bei Integerarithmetik ist die Division in aller Regel nicht assoziativ.
 
hei cool danke für die schnellen antworten 🙂
Vorher zuviel in PHP programmiert?
jepp^^ sogut wie nur in php 🙂

ok das hab ich verstanden, aber das war nicht mein eigentliches probelm:

Code:
for(i=0; i < 26; i++)           //in % umrechnen
    {
        int anz = anzahl[i];
        int len = text.length;
        double ergebniss;
      System.out.println(anz);
      System.out.println(len);
      ergebniss = (anz/len) * 100;
      System.out.println(ergebniss);
    }

das array "anzahl" beinhaltet 26 stellen, also 0 ist A und 25 ist Z...quasi einmal das Alphabet. vorher habe ich aus einem text die buchstaben gelesen und die häufigkeit steht halt in diesem array.
so jetzt möchte ich, dass diese werte in dem array in % umgerechnet werden.
aber auch das kriegt er nicht hin^^

//edit: achso würde das evt so gehen?

Code:
ergebniss = anz * 100/len;
 
Da die Division laut Rechenregeln vor der Multiplikation liegt ist auch folgendes gültig:
Code:
ergebnis = (double) 5 / 3 * 100;
 
ja sry, mit doppel s... oups *peinlich*
jo hab meine frage schon selber beantwortet^^

danke nochmal für die antworten, is ja echt ne super community hier 🙂
 
philipp hat gesagt.:
Vorher zuviel in PHP programmiert?
jepp^^ sogut wie nur in php 🙂

Dann ist's bei mir genau umgekehrt. :toll:

Ich habe gestern Abend angefangen, mich mal durch ein
PHP-Tutorial zu wühlen;
man will ja schließlich auch mal gucken, was sonst noch...

0xdeadbeef hat gesagt.:
Urgl, "ergebniss" mit zwei "s"

Dann hoff' ich doch mal stark, daß sowas keine
notwendige Bedingung für PHP-Progger ist! :bahnhof:
 
lol^^
nee also wir proggen java zur zeit im informatik kurs und wir sollen halt nen codierten text decodieren. und unserer lehrer hats gar nicht drauf und wenn ich ihn sowas frage dann guckt der nur doof... 🙁
dann musste ich die initiative ergreifen und hier mal anfragen und siehe, es hat geklappt 🙂

Leroy42 hat gesagt.:
Dann hoff' ich doch mal stark, daß sowas keine
notwendige Bedingung für PHP-Progger ist! :bahnhof:

jo ich kann dich beruhigen, es ist keine notwendige bedinung!
aber gibs zu, du hättest den rechtschreib fehler doch selber nicht gefunden *G* 😀
nee ok scherz beiseite, danke nochmal für die hilfe, ich hoffe ich krieg das jetzt hin 🙂

Greest. philipp 🙂
 
L-ectron-X hat gesagt.:
Da die Division laut Rechenregeln vor der Multiplikation liegt...

Hääh! :shock:

Die Division hat weder Priorität noch Präzedenz vor der Multiplikation.

Es klappt einfach wegen der "Links-nach-Rechts"-Abarbeitung:

Code:
var <- 5/3*100

liefert z.B. in APL und J
0.01666

Naja, mach dir nix draus: Ist halt schon Samstag 😎
 
L-ectron-X hat gesagt.:
Da die Division laut Rechenregeln vor der Multiplikation liegt ist auch folgendes gültig:
Code:
ergebnis = (double) 5 / 3 * 100;

Genauer gesagt ist die Multiplikation assoziativ und somit die Reihenfolge/Klammerung wurscht. 😉
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben