in Visual in Forms mit C# Prozent?
Guten Tag weiß jemand wie ich es hinbekomme mit Prozent rechnen zu können. Und zwar wird eine 5 eingeben und dazu das Prozentzeichen. Soweit alles gut. Die eingegebene Zahl wird direkt durch 100 geteilt (5 : 100 = 0,05 ) und unter dem Eingabefeld notiert (zur hilfe damit man weiß was man eingeben hat) und nun wird immer ein Fehler ausgegeben das dort die Zahl falsch deklariert wurde als String nur wenn ich Convert.ToDouble eingebe scheinbt es nichts zu bringen. Jemand eine Ahnung was ich anders machen kann evntl. mit Code Beispiel. Danke schonmal im Vorraus
hier der Code
public partial class Rechner : Form
{
string calc = "";
string zahl = "";
double pergebnis = 100;
private void prozent_Click_1(object sender, EventArgs e)
{
double zahl2 = Convert.ToDouble(TEingabe.Text);
zahl = "" + (zahl2 / pergebnis);
label2.Text = zahl;
TEingabe.Text = "";
calc = "%";
label3.Text = calc;
}
private void berechne_Click_1(object sender, EventArgs e)
{
double zahl3 = Convert.ToDouble(zahl);
double Eingabe = Convert.ToDouble(TEingabe.Text);
double sum = zahl3 - Eingabe;
double summe = zahl3 + Eingabe;
if (calc == "-")
{
TEingabe.Text = "" + sum;
}
else if (calc == "*")
{
TEingabe.Text = "" + zahl3 * Eingabe;
}
else if (calc == "/")
{
TEingabe.Text = "" + zahl3 / Eingabe;
}
else if (calc == "+")
{
TEingabe.Text = "" + summe;
}
else if (calc == "%")
{
TEingabe.Text = "" + zahl;
}
label3.Text = "";
label2.Text = "";
}
}
1 Antwort
Wenn du prozent_Click_1 und berechne_Click_1 hintereinander ausführen solltest, würde eine Konversion des Wertes im Textfeld TEingabe scheitern, denn das leerst du in der erstgenannten Methode wieder.
Ansonsten sehe in deinem Code erst einmal keinen Fehler. Problematisch wäre es nur, wenn du 5% zusammenhängend in dein Eingabefeld schreiben würdest. Dieser String ließe sich nicht so direkt zu einer Zahl konvertieren. Du müsstest erst die Zahl herausholen.
string inputWithoutUnit = YourInputField.Text.Replace("%", string.Empty);
double number = Convert.ToDouble(inputWithoutUnit);
Grundsätzlich wäre es im Programm besser, Ausgabelogik und die Kernlogik des Programms voneinander zu trennen. Das heißt, die Berechnung erfolgt in einer eigenen Methode, nur mit Zahlen, ohne dass darin irgendwelche Typecasts stattfinden würden.
Beispiel:
public void CalculateOnClick(object sender, EventArgs e)
{
double number1 = Convert.ToDouble(Number1Field.Text);
double number2 = Convert.ToDouble(Number2Field.Text);
string operator = OperatorField.Text;
double result = Calculate(number1, number2, operator);
ResultField.Text = result.ToString();
}
private double Calculate(double number1, double number2, string operator)
{
double result = 0;
if (operator == "-")
{
result = number1 - number2;
}
else if (operator == "*")
{
result = number1 * number2;
}
// etc. ...
return result;
}
Vorteilhaft hierbei ist, dass es erst einmal keinen Mix verschiedener Interessen gibt (in diesem Fall rechnen und ausgeben). Jede Methode konzentriert sich nur auf eine Aufgabe. So könnte Calculate auch anderweitig verwendet werden (z.B. für einen Konsolenrechner). Sie ist nicht direkt daran gekoppelt, Windows Forms-Komponenten bedienen zu müssen.