Entwickler-Ecke

WPF / Silverlight - C# WPF Taschenrechner - Alternative zu double.Parse


Kirk1701A - Fr 13.10.17 14:20
Titel: C# WPF Taschenrechner - Alternative zu double.Parse
Hallo Leute,

ich habe folgendes Problem:

Ich wollte mit meinem Taschenrechner rechnen, aber der Taschenrechner schmeißt dauernd falsche Ergebnisse raus. Den Fehler habe ich auch schon gefunden. Nehmen wir mal das Beispiel 3+3+3+3 und 3+3-3+3. Die erste Aufgabe ist 12. Das sagt auch mein Taschenrechner. Die zweite Aufgabe ist 0. Mein Taschenrechner sagt, das sei 12. :gruebel: :motz: :suspect: :?!?: :roll:

Also habe ich mit double.TryParse versucht, den Fehler zu finden, und, voila, da war er. Das hängt anscheinend damit zusammen, dass die TextBox in der das Ergebnis angezeigt wird, falsch formatiert ist (standardmäßig in string).

Hier der ausschlaggebende Code:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
else if (e.Key == Key.Add)
            {
                if (op.Text == "+")
                {
                    p.Text += "+";
                    //rechner.Text += "+";
                    op.Text = "+";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }

                else if (op.Text == "-")
                {
                    op.Clear();
                    p.Text += "+";
                    //rechner.Text += "+";
                    op.Text = "+";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }
                else if (op.Text == "*")
                {
                    op.Clear();
                    p.Text += "+";
                    //rechner.Text += "+";
                    op.Text = "+";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }

                else if (op.Text == "/")
                {
                    op.Clear();
                    p.Text += "+";
                    //rechner.Text += "+";
                    op.Text = "+";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }

                else
                {
                    op.Clear();
                    p.Text += "+";
                    //rechner.Text += "+";
                    op.Text = "+";
                    erg1 += double.Parse(rechner.Text);



                    if (double.TryParse(rechner.Text, out erg1))
                    {

                    }
                    else
                    {
                        rechner.Text = "ERROR!";
                    }
                    rechner.Clear();
                }
            }

            else if (e.Key == Key.Subtract)
            {
                if (op.Text == "-")
                {
                    p.Text += "-";
                    //rechner.Text += "-"
                    op.Text = "-";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }

                else if (op.Text == "+")
                {
                    op.Clear();
                    p.Text += "-";
                    //rechner.Text += "-";
                    op.Text = "-";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }

                else if (op.Text == "*")
                {
                    op.Clear();
                    p.Text += "-";
                    //rechner.Text += "-";
                    op.Text = "-";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }

                else if (op.Text == "/")
                {
                    op.Clear();
                    p.Text += "-";
                    //rechner.Text += "-";
                    op.Text = "-";
                    erg1 += double.Parse(rechner.Text);
                    rechner.Clear();
                }

                else
                {
                    p.Text += "-";
                    //rechner.Text += "-";
                    op.Text = "-";
                    erg1 += double.Parse(rechner.Text);

                }

                if (double.TryParse(rechner.Text, out erg1))
                {

                }
                else
                {
                    rechner.Text = "ERROR!";
                }
                rechner.Clear();

            }


else if (e.Key == Key.Return)
            {
                if (op.Text == "+")
                {
                    erg2 = erg1 + double.Parse(rechner.Text);
                    rechner.Text = erg2.ToString();
                    erg1 = 0;
                }

                else if (op.Text == "-")
                {
                    erg2 = erg1 - double.Parse(rechner.Text);
                    rechner.Text = erg2.ToString();
                    erg1 = 0;
                }

                else if (op.Text == "*")
                {
                    erg2 = erg1 * double.Parse(rechner.Text);
                    rechner.Text = erg2.ToString();
                    erg1 = 0;
                }

                else if (op.Text == "/")
                {
                    erg2 = erg1 / double.Parse(rechner.Text);
                    rechner.Text = erg2.ToString();
                    erg1 = 0;
                }
            }


Nicht wundern, dass die if-Methode gaanz oben mit "else if" anfängt, die is mitten in einer laaaaangen Methode drin.

Live long and prosper my friends

Euer

Kirk


Ralf Jansen - Fr 13.10.17 14:39

Ich kann nur wiederholen Parse/TryParse rechnet nicht und kann damit hier nur sehr unwahrscheinlich das Problem sein.

Wenn in rechner.Text der string "12" steht wird Parse da die Zahl 12 draus machen. Und wenn der string "0" drin steht wird Parse die Zahl 0 draus machen. Sollte in rechner.Text aber "3+3+3+3" stehen dann knallt es da das keine Zahl ist sondern ein mathematischer Ausdruck.


Kirk1701A - Fr 03.11.17 14:30

Jolan Tru Leute,

danke an alle, die mir geholfen haben. Ich habe jetzt einen Taschenrechner fertiggestellt mit dem Extra, dass da ein Sternzeitrechner drin ist. Wer interesse an einen Sternzeitrechner hat, meldet sich bei mir bitte per pn und bekommt ihn innerhalb von 14 Tagen. Es ist auch möglich ihn mit dem Taschenrechner zu bekommen. Natürlich alles kostenfrei und unverbindlich und ohne Datenabfrage. Ich schreibe mir lediglich nur eure Profilnamen auf, um zu wissen, wer schon eins bekommen hat.

Euer Kirk


Stephan74656 - Fr 12.10.18 05:41

Hi Kirk,

Ich möchte gerne den Taschenrechner haben, aber ohne Sternzeitrechner. Den hab ich nämlich selber.


Stephan74656