Zahlentypchaos

Status
Nicht offen für weitere Antworten.

A3XX

Bekanntes Mitglied
HI

Heieiei..hab ich jetzt lange gehabt um mein Problem zu lösen. Ich hab ein kleines Programm geschrieben, mit welchem man Graphen zeichnen kann. Allerdings war mein Problem, dass es auf der xAchse jeweils gleich einen ganzen Einheitensprung gemacht hat und nicht nur 1 xPixel...also da merkte ich shcon, irgendwo habe ich nen Fehler...

Ich habs auf alle Fälle so gemacht:
ich hab eine Breite für das Fenster wo der Graph gezeichnet werden soll - width
ich hab eine Angabe zu der Anzahl Einheiten (von links nach rechts) - units

am anfang hatte iuch folgende zwei funktionen (die für den FEhler verantwortlich waren):

Code:
public int scaleY(float y) {
    return Math.round(yOrigin - (y * (width / units)));
}

public float scaleX (int x){
    return (x - xOrigin) / (width / units);
}

Rein rechnerisch stimmen diese beiden Funktionen
a) berechnet den y Wert (abhängig von der Anzahl units) auf dem Screen
b) berrechnet genau umgekehrt von den Anzahl Pixeln auf dem Screen den Einheitenwert

nun, dies ging nicht...wieso?! ich habe nacher in beiden width/units durch die float Variable scale ersetzt und da gings...wieso?!
so wie ich mir das bisher vorgestellt habe, also das rechnen in java: Wenn ich zwei integer, z.B. 3 und 2, dividiere gibt es 1.5 und je nachdem was der Rückgabewert (oder die Variable die das Ergebnis kriegt) für ein Typ ist wird das 0.5 abgeschnipselt oder nicht.
Aber offenbar ist das nicht so oder? denn sonst hätte meine Funktion ja funktioniert?!
 
B

Beni

Gast
Es läuft eher umgekehrt: zuerst wird abgeschnippselt, und dann zugewiesen.
Da hilft nur ein Cast: 3 / (double)2
 

A3XX

Bekanntes Mitglied
ja schon, aber schau dir mal meine zweite methode an:

das sollte doch gehen? da sollte doch eben nichts abgeschnipselt werden da der rückgabewert float ist oder nicht?!
 
B

Beni

Gast
Ich vermute mal x, xOrigin, width und units sind Integer.

Dann ist (width / units) ein Integer (Schnitt).
Dann ist(x - xOrigin) ein Integer (Schnitt).

Dann ist (x - xOrigin) / (width / units) ein Integer (Schnitt)

Dann gibt es zuletzt noch einen impliziten Cast nach float, (kein Schnitt).

Aber der Cast kommt ein bisschen spät... (x - xOrigin) / (width / (float)units) funktioniert vielleicht besser.

mfg Beni
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben