Laden...

Warum kann man in C# nicht *direkt* mit Strings (die Ziffern enthalten) rechnen?

Erstellt von Diablo vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.218 Views
Thema geschlossen
D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren
Warum kann man in C# nicht *direkt* mit Strings (die Ziffern enthalten) rechnen?

Hallo,

warum ist es so kompliziert Textboxeingaben zu berechnen?

Also mal angenommen ich habe 2 Textboxen (Textbox1 & Textbox2). Dort gebe ich jeweils eine 5 ein und möchte diese Eingabe dann berechnet haben und in einem Lable ausgegeben bekommen.

Ich komme von VB.Net und dort war es ganz einfach so:

Label1.Text = Textbox1.Text + Textbox2.Text

Warum muss man das bei C# so kompliziert machen mit "int.parse"??

Label1.Text = (int.Parse(Textbox1.Text) + (int.Parse(Textbox2.Text) * (decimal.Parse(Textbox3.Text)))).ToString();

Und was ist wenn im String Zahlen bzw. Buchstaben vorhanden sind?? So stürzt es dann ab...

F
10.010 Beiträge seit 2004
vor 12 Jahren

C# ist nunmal eine typsichere Sprache und ein String ist deshalb ein string und kein Int.

Und das ging schon in VB.NET nur wenn du Option Strict aus hast.
Wenn Du frickeln willst nimm VB6.

D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

Und das ging schon in VB.NET nur wenn du Option Strict aus hast.

Ich habe nichts bei VB.Net ausgeschaltet. Ging auch so.

Wenn Du frickeln willst nimm VB6.

Nunja, mit VB6 kann ich nichts anfangen, muss mit C# lernen zu arbeiten. Muss ich mir mal ein Buch zu kaufen. Jedenfalls sit es komplizierter als mein "geliebtes" VB.Net.

Allerdings ist es mehr oder weniger für mich logisch das das nur so geht 😁

C
2.121 Beiträge seit 2010
vor 12 Jahren

Frag dich lieber warum es Sprachen gibt, in denen "einfach irgendwas" passiert, ohne zu wissen was und warum. Sprachen, wo man jeden Müll eingeben kann und es kommt am Ende was raus, nur obs wirklich passt?

Und was ist wenn im String Zahlen bzw. Buchstaben vorhanden sind?? So stürzt es dann ab...

Was sollte es deiner Meinung nach tun? Einen Buchstaben kann man nunmal zu keiner Zahl umwandeln und auch zu keiner Zahl addieren.
Sprachen die dabei einfach alles rauslassen was keine Zahl ergibt, sind nicht unkompliziert sondern kompletter Müll.

K
79 Beiträge seit 2006
vor 12 Jahren

Ich denke VB hat auch nicht richtig gerechnet wenn du ihm Buchstaben übergeben hast. Rechnung mit Buchstaben oder Sonderzeichen funktioniert auch so nicht...

Vor dem Kauf, würde ich mal hierauf einen Blick werfen:

OpenBook C#

D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

Wird in dem Buch nur auf die Console eingegangen oder auch auf eine normale Windows Formsanwendung?

@chilic: Nein ich möchte natürlich keine Buchstaben mit Zahlen kombinieren oder umwandeln. Allerdings musste ich bei VB.Net nicht expliziet "Integer" angeben bzw. auf Integer parsen, sondern konnte die Textboxeingaben "einfach so" rechnen lassen. Wenn ein Buchstabe dazwischen steht, funktioniert das natürlich nicht, das ist klar.

Dann würde nämlich als Fehler folgendes erscheinen:

Fehlermeldung:
Ungültige Konvertierung von der Zeichenfolge XX in Typ Double.

M
402 Beiträge seit 2005
vor 12 Jahren

Und was ist wenn im String Zahlen bzw. Buchstaben vorhanden sind?? So stürzt es dann ab...

soweit solle es doch gar nicht erst kommen...

"Never trust user input..."

Du könntest z.b. mit einer masked Textbox sicherstellen
dass nur das korrekte "Format" eingegeben wird und
vor dem Aufruf der Berechnung die Eingaben nochmal validieren
und gegebenenfalls eine Exception werfen.

Was aber nichts daran ändert, dass Texbox.Text ein String ist...

C
2.121 Beiträge seit 2010
vor 12 Jahren

Dann würde nämlich als Fehler folgendes erscheinen:...

Genau, dann prügelt es dem Nutzer eine vorgegebene Fehlermeldung um die Ohren und du weißt als Programmierer nichts davon, kannst nicht drauf reagieren, hast den Zustand deines programms vielleicht irgendwie mittendrin in einem Ablauf abgebrochen...
Da wandelst du das Zeug doch lieber selber um und kannst auf Fehlerfälle angepasst reagieren.

D
615 Beiträge seit 2009
vor 12 Jahren

Hallo Diablo

Damals habe ich auch mit vb angefangen, irgedwann dann vb6, dann vb.net und wollte nie etwas von C# wissen.

Nach einigen Jahren erfahrung sammeln und "reife Prozess" musste ich dann die Vorzüge einsehen....

Am leichtesten ist es am Anfang einiges "einfach zu akzeptieren", da man erst später wirklich deren Vorzüge bemerkt....

Als Buch würde ich Dir C# HEAD FIRST empfehlen, super für den Einstieg.

Beste Grüsse

Diräkt

U
189 Beiträge seit 2011
vor 12 Jahren

Tacheles is

Label1.Text = (int.Parse(Textbox1.Text) + (int.Parse(Textbox2.Text) * (decimal.Parse(Textbox3.Text)))).ToString();  

Ist der Code nicht bisschen komisch, ich würde das so machen:


label1.Text = Convert.ToInt32(textBox1) + Convert.ToInt32(textBox2);

Oder hab ich da was falsch verstanden
Man könnte dann ja auch noch try-catch benutzen

UZI

C
1.214 Beiträge seit 2006
vor 12 Jahren

Hallo UZi,

bei deinem Code fehlt nach den Textboxen noch jeweils das .Text. Aber stimmt, warum man das noch mit Textbox3.Text multiplizieren muss, hat der Fragesteller noch gar nicht erwähnt und in seinem VB Code kommt es auch nicht vor.

D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

😁

Ich wollte nur noch mal aufzeigen, dass man das auch mit "dezimal" machen muss.

Aber wenn das 2. auch funktioniert, ist es ja auch gut. Aber man kommt ja in der Programmierung generell auf vielen Wegen zum Ziel 🙂

D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 12 Jahren

ok neuer fehler, irgendwas mache ich da verkehrt...

txterg.Text = int.Parse(txt1.Text) / (double.Parse(txt2.Text) * 60 * (int.Parse(txt3.Text) * 3.1415 / 1000000))).ToString();

Wenn ich nun folgende Daten eingebe:

txt1 = 25000
txt2 = 1,9
txt3 = 63

Kommt als Ergebnis: 1108045,37117814

Eigentlich sollte aber: 156,248289473684 herraus kommen.

Was mache ich verkehrt?

Außerdem:

Warum funktioniert:

txtErg.Text = (decimal.Parse(txt1.Text) / (int.Parse(txt2.Text) * (int.Parse(txt3.Text)))).ToString();

Und:

txterg.Text = int.Parse(txt1.Text) / (decimal.Parse(txt2.Text) * 60 * (int.Parse(txt3.Text) * 3.1415 / 1000000))).ToString();

nicht?? Bei letzterem kommt immer: > Fehlermeldung:

Fehler 1 Der Operator "*" kann nicht auf Operanden vom Typ "decimal" und "double" angewendet werden.

C
1.214 Beiträge seit 2006
vor 12 Jahren

Sorry wenn ich das so sage, aber dieser Thread gehört eindeutig geschlossen. Du hast dich keine Minute mit dem was du machst beschäftigt, probierst einfach irgendwas rum, ohne dir die Grundlagen anzueignen und kommst hier gleich mit jedem Fehler angerannt. Dazu ist das Forum nicht gedacht.

Hinweis von talla vor 12 Jahren

Wie wahr, bitte dazu auch [Hinweis] Wie poste ich richtig? im besonderen Punkt 1.1.1 beachten.

Thema geschlossen