Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Warum kann man in C# nicht *direkt* mit Strings (die Ziffern enthalten) rechnen?
Diablo
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

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

beantworten | zitieren | melden

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...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Diablo am .
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10077

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Diablo
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

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

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

Zitat von FZelle
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 :D
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Diablo am .
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2132

beantworten | zitieren | melden

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?
Zitat von Diablo
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.
private Nachricht | Beiträge des Benutzers
Killerhase
myCSharp.de - Member



Dabei seit:
Beiträge: 79
Herkunft: Bayern

beantworten | zitieren | melden

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#
private Nachricht | Beiträge des Benutzers
Diablo
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

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:
Fehler
Ungültige Konvertierung von der Zeichenfolge XX in Typ Double.
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

Zitat
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...
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2132

beantworten | zitieren | melden

Zitat von Diablo
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.
private Nachricht | Beiträge des Benutzers
Diräkt
myCSharp.de - Member



Dabei seit:
Beiträge: 620
Herkunft: Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
UZI
myCSharp.de - Member



Dabei seit:
Beiträge: 194

beantworten | zitieren | melden

Tacheles is
Zitat

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
private Nachricht | Beiträge des Benutzers
Coder007
myCSharp.de - Member



Dabei seit:
Beiträge: 1249

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Diablo
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden



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
private Nachricht | Beiträge des Benutzers
Diablo
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

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:
Fehler
Fehler 1 Der Operator "*" kann nicht auf Operanden vom Typ "decimal" und "double" angewendet werden.
private Nachricht | Beiträge des Benutzers
Coder007
myCSharp.de - Member



Dabei seit:
Beiträge: 1249

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Coder007 am .
private Nachricht | Beiträge des Benutzers

Moderationshinweis von talla (25.06.2011 - 18:20:46):

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