Berechnung verbessern

Guten Tag,

ich hoffe das passt hier einigermaßen rein.

Ich habe ein Programm geschrieben mit dem ich eine Astrophysikalische Gleichung berechnen kann. Angegeben werden Fließkommazahlen, Prozentwerte und ganze Zahlen. Der Kalkulator funktioniert, jedoch bin ich der Meinung ich hätte den Code irgendwie verbessern können.

Zum Ablauf:

Ich hole mir die Werte, ersetze Komma gegen Punkt, schreibe sie in die Variablen, parse sie in passende Datentypen, wandle die Prozentangaben in Fließkommazahlen um, Multipliziere die Werte miteinander, runde das Ergebnis um und ersetze Punkt wieder gegen Komma. So weit so gut. Funktioniert auch. Doch hätte ich da gern irgendwie eine Elegantere Methode dies zu berechnen, als jede Variable einzeln.

Hier einmal ein Beispiel mit 3 Variablen:

Code:
// Werte holen
String a1 = a1TextField.getText().replace(",", ".");
String a2 = a2TextField.getText().replace(",", ".");
String a2 = a2TextField.getText().replace(",", ".");

// Umwandlung der Strings in passende Werte, D steht für Double Wert
double a1D =  (double) Double.parseDouble(a1);
double a2D =  (double) Double.parseDouble(a2);
double a2D =  (double) Double.parseDouble(a2);

// Prozentwerte in Dezimalstellen umrechnen
a1P = a1D / 100;

// Werte Zusammen rechnen
erg = a1P * a2D * a3D

//Runden und Ausgeben
ergebnissTextField.setText(String.valueOf(Math.round(erg * 100.) / 100.).replace(".", ","));

Ich denke einmal das ist nicht zu sehr Elegant, jedoch zweckmäßig. Hat ggf jemand einen kleinen Vorschlag wie ich die ein oder andere Berechnung vielleicht zusammen fassen kann? Ich hab schon versucht beim holen der Strings die ganzen Daten zu parsen, jedoch bin ich gescheitert und hab es gelassen. 😀

Danke für eure Tipps.
 
Schau dir mal die Klasse java.text.DecimalFormat an, das könnte genau das sein, was du suchst.

BTW: Ich weiß zwar nicht, was ich mir unter einer "astrophysischen Gleichung" vorzustellen habe, aber es klingt, als ob du mit ziemlich "extremen" Werten bzw. hoher erforderlicher Genauigkeit zu tun hättest. In diesem Fall solltest du eventuell überlegen, ob double wirklich das Richtige für dich ist. Mehr dazu in den FAQs.

Ark
 
Eventuell kann man einige Textfelder durch JSpinner ersetzen, da kann man direkt angeben, dass man Zahlen (mit einer bestimmten Schrittweite) haben will, allerdings ist die Bedienung manchmal etwas hakelig.
 
Danke für die Tipps. Die Klasse java.text.DecimalFormat schau ich mir auf jeden fall einmal an. So genau müssen die werte nicht sein, max 2 Nachkommastellen grob aufgerundet. ( Die Astrophysik kennt keine Genauigkeit :lol: )

@Landei: Das hatte ich mir für die GUI auch überlegt, jedoch kann man Prozentwerte auch im 0,1 der 0,05 Bereich angeben. Da wäre der Spinner wirklich etwas hackelig 🙂

Noch eine Frage dazu. Bekomme ich es irgendwie hin das ich das holen der Daten aus den Textfield und mit dem parsen zu bestimmten werten vereinen kann?

Quasi die beiden zusammen fassen.
Java:
Double a1 = a1TextField.getText().replace(",", ".");

double a1D =  (double) Double.parseDouble(a1);

Auf jeden fall werde ich mir einmal die java.text.DecimalFormat Klasse angucken, hört sich vielversprechend an.

Besten Dank.

Edit: Ich habe nun gleich einmal die klasse angeschaut. Und was soll ich sagen, sie ist klasse. Es lässt sich auf jeden fall besser arbeiten als mit Mathround.
Java:
double erg = 0;
DecimalFormat df = new DecimalFormat(",##0.000");

ergebnissTextField.setText(df.format(erg).replace(".", ","));
:toll:
 
Zuletzt bearbeitet:
meinst du sowas in der Art?

Java:
	double a1 = (double) Double.parseDouble(a1TextField.getText().replace(
				",", "."));
 
meinst du sowas in der Art?

Java:
	double a1 = (double) Double.parseDouble(a1TextField.getText().replace(
				",", "."));

Genial, so meine ich das. Das macht meinen Code um ca 10cm kürzer 😀
Ich hab es so ähnlich versucht, habe aber die Abfrage falsch herum gemacht, jetzt wo ich es sehe wie es richtig sein muss, wird mir einiges klar.

Vielen vielen Danke. 🙂
 
Ohne dass ich das probiert hätte:
Java:
NumberFormat.getPercentInstance(Locale.GERMANY)
Das könnte eventuell das Punkt-Komma-Problem lösen.

Ark
 
Ohne dass ich das probiert hätte:
Java:
NumberFormat.getPercentInstance(Locale.GERMANY)
Das könnte eventuell das Punkt-Komma-Problem lösen.

Ark

Mir ist gerade aufgefallen, da ich ja schon hier:

Java:
DecimalFormat df = new DecimalFormat(",##0.000");

vorgebe wie die Ausgabe aus zu sehen hat, kann ich das repalce in der ausgabe weg lassen. Quasi so:

Java:
ergebnissTextField.setText(df.format(erg));

Ich weis nur noch nicht so recht wie ich,

Java:
NumberFormat.getPercentInstance(Locale.GERMANY)

benutzen kann um das komma gleich beim holen der daten zu dezimieren. Also ohne Replace. Wobei es ja eigentlich keinen unterschied macht, da ja eigentlich nur der Interpreter den Punkt benötigt.
 
Zuletzt bearbeitet:
Ich weis nur noch nicht so recht wie ich,

Java:
NumberFormat.getPercentInstance(Locale.GERMANY)

benutzen kann um das komma gleich beim holen der daten zu dezimieren. Also ohne Replace.
Ich weiß es auch nicht, aber
Code:
java.text.NumberFormat.parse(String)
sieht spontan wie das Gesuchte aus.

Ark
 

Neue Themen


Zurück
Oben