TextBox String Inhalt umrechnen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    TextBox String Inhalt umrechnen

    Hallo,

    ganz simple Frage, ich komm aber gerade nicht drauf...ich steh vollkommen auf dem Schlauch...

    ich habe mehrere Textboxen, in diese schreibe ich Zahlen, dann klicke ich auf einen Knopf und die Zahlen werden umgerechnet

    allerdings habe ich hier ein Problem mit double und string...wie kann ich das umgehen? ...klar ich könnte es unsauber in vb.net mit Strict Off machen...aber das ist ja nicht Sinn und Zweck davon ;)

    C#-Quellcode

    1. double zahl;
    2. zahl = txtBox4.Text;
    3. txtBox19.Text = zahl : 4;
    hm das funktioniert nicht so recht...

    ich schreibe einen Wert in TextBox_1 und in TextBox_2 möchte ich dann das was in TextBox_1 steht auch haben nur eben zb. den Wert /4 geteilt...

    TextBox_1 -> 4
    TextBox_2 -> 1 => Ergebnis (die Zahlenwerte sind vom Typ double...)
    Hi
    Option Strict On verhindert so einen Quatsch doch eigentlich.

    VB.NET-Quellcode

    1. Dim x As Double = 0
    2. If Not Double.TryParse(_myNamedTextBox.Text, x) Then
    3. MessageBox.Show("Bitte gültige Zahl eingeben.",...)
    4. Exit Sub
    5. End If
    6. Dim result As Double = x / 4
    7. _myNamedResultTextBox.Text = result.ToString()


    Und wie schon so oft gesagt: Ein Text ist keine Zahl. Er kann eine Zahl darstellen, aber ist de facto keine Zahl. Auch Hallo kann ein String sein, ist aber als Dezimalzahl nicht unbedingt geeignet.

    Übrigens solltest du wirklich an den Grundlagen feilen. Wenn es schon bei einer simplen Division scheitert, heißt das, dass du wirklich Aufwand betreiben solltest.

    Gruß
    ~blaze~
    das mit dem : und / war ein dummer Tippfehler...und ich weiß dass das eine ein String und das andere ein Double ist...ich wollte nur wissen wie ich das so umwandeln kann dass ich damit was rechnen kann oder wie soll ich denn das sonst lösen? oder gibt es für TextBoxen noch was, das den eingetippten Inhalt nicht als String interpretiert sondern als double oder int? so im Sinne von TextBox.Text = ....
    Eine Konvertierung sollte immer per ToString oder Typ.(Try)Parse erfolgen, bei den primitiven Datentypen. Ausnahmen (z.B. System.ComponentModel.TypeConverter) gibt's zwar, aber die erledigen eine ähnliche Aufgabe.
    Es ist halt wichtig, dass du zwischen Double und String unterscheidest, das war auch eher an mox, als an dich gerichtet.

    Gruß
    ~blaze~
    also deine fragen wurdne doch alle beantwortet da steht doch wie man den inhalt eienr txtbox umwandelt in int oder double oder was auch immer

    so z.b

    dim einint as Integer
    einint = Convert.ToInt32(textBox1.Text)
    oder
    einint = Double.Parse(textBox1.Text)
    Hier könnte meine Signatur stehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mox“ ()

    Moin,

    Ich denke, ~blaze~ hatte es schon angesprochen, aber es nicht explizit an mox gerichtet:
    @mox Auch Du solltest Option Strict On schalten. Du weißt einem String einen Double zu in dem Beispiel. Das ist nat. nicht richtig, da es eben einen String erwartet. Nicht, dass der TE es falsch lernt. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Um die Frage zu beantworten:
    oder gibt es für TextBoxen noch was, das den eingetippten Inhalt nicht als String interpretiert sondern als double oder int?

    Ja. Das Ding nennt sich NumericUpDown. Man kann Maximum, Minimum und Kommastellen einstellen.
    Den Wert bekommt man über die Value-Property. Der Datentyp ist Decimal. Das hat damit zu tun, dass die Eingabe im Dezimalsystem erfolgt, Double und Single die Werte aber im Format s*m*2^e (beachte den 2-er) speichert. Das bedeutet, wenn man versucht, den Wert 0.1(dezimal) in Binär umzuwandeln, kommt das heraus: 0.0001100110011.., also der Teil 0011 wiederholt sich. Das ist wie z.B. 1/3 im Dezimalsystem: 0.3333333.... Das kann der Computer nicht speichern, und deswegen gibt es Rundungsfehler.
    Decimal speichert die Werte im Format s*m*10^e, also gibt es kann alles gespeichert werden, was man auch eingeben kann.
    Du kannst für die Berechnung genauso Decimal anstelle von Double verwenden. Wenn Du trotzdem Double verwenden möchtest, kannst Du konvertieren (hier voll ausgeschrieben):

    VB.NET-Quellcode

    1. Dim DecimalValue As Decimal = 0.5D 'Das D am Ende steht für ein Decimal-Literal.
    2. Dim DoubleValue As Double = Decimal.ToDouble(DecimalValue)

    Und umgekehrt:

    VB.NET-Quellcode

    1. Dim DoubleValue As Double = 0.5
    2. Dim DecimalValue As Decimal = New Decimal(DoubleValue)


    Edit:
    Convert.ToInt32(String) ruft auch nur Integer.Parse(String) auf:

    C#-Quellcode

    1. public static int ToInt32(string value)
    2. {
    3. if (value == null)
    4. {
    5. return 0;
    6. }
    7. return int.Parse(value, CultureInfo.CurrentCulture);
    8. }
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils