Autor Beitrag
Kirk1701A
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 126
Erhaltene Danke: 3

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
BeitragVerfasst: Fr 13.10.17 14:20 
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:

ausblenden volle Höhe 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

_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 126
Erhaltene Danke: 3

Linux, Ubuntu, Mac, IOS, Android (4.2.x - 9.x.x), Win Mob., Micro. DOS, Win 95, Win 98, Win 2000, Win ME, Win XP, Win Vista, Win 7, Win8.1, Win 10
C# (VS 2017 Community/Enterprise, VS 2019 Professional/Enterprise), VB (VBA), JavaScript
BeitragVerfasst: 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

_________________
"Ich war es und werde es immer bleiben... Ihr Freund!"
@Spock -> Star Trek II: Der Zorn des Khan
Stephan74656
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 26

Alle bisher veröffentlichte Windows (Win95 - Win10), Android 4.2.2 - 7.0.0, Ubuntu, Linux, Mac, IOS12 + IOS11
VS 2017 Enterprise (C#)
BeitragVerfasst: 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