Rechnen mit Kommazahlen

  • Allgemein

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Starz.

    Rechnen mit Kommazahlen

    Hallo zusammen,


    ich wollte ma wissen wie man mit kommazahlen rechnet. Denn ich hab folgendes problem:


    ich habe zwei textboxen, eine für die eine zahl die andere für die andere und zwei label. Mein code sieht so aus:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Label1.Text = Val(TextBox1.Text) * Val(TextBox2.Text)
    4. Label2.Text = Val(Label1.Text) + Val(TextBox1.Text)
    5. End Sub
    6. End Class


    Das erste mit label 1 funktioniert nur des zweite mit plus funktioniert nicht.....


    Ein bsp:

    ich schreibe in die erste textbox 0.5
    in die zweite 3

    dann drück ich den button und bekomm für beide Label 1,5 ???????

    Ich bin für eure Hilfe sehr dankbar! :)
    So funktionierts auf jeden Fall:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Label1.Text = CDbl(TextBox1.Text.Replace(".", ",")) * CDbl(TextBox2.Text.Replace(".", ","))
    4. Label2.Text = CDbl(Label1.Text) + CDbl(TextBox1.Text.Replace(".", ","))
    5. End Sub
    6. End Class


    Bei Val(Label1.Text), wenn Label1.Text == 1,5 ist, wird das 1,5 zu 1 umgewandelt, der Rest hinter dem "," fällt weg, nur ein Punkt wird als Koma gewertet (Frag mich nicht warum, habs nur aus selbstversuchen herausgefunden :D) logischerweise sieht die Rechnung dann wiefolgt aus:
    Label2.Text = 1 + 0.5 = 1,5

    Kannst du auch selbst nachkontrollieren, wenn du für TextBox1 den Wert 0,5 statt 0.5 eingibst kommt für Label1 und 2 jeweils 0 raus, 0*3 = 0, 0+0=0.

    MfG Safloc08

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Safloc08“ ()

    Safloc08 schrieb:

    So funktionierts auf jeden Fall:
    Ganz bestimmt hast Du, wie alle hier im Forum, Option Strict auf On gesetzt. :D

    Safloc08 schrieb:

    Label1.Text = CDbl(TextBox1.Text.Replace(".", ",")) * CDbl(TextBox2.Text.Replace(".", ","))
    ist ja wohl das Letzte, was einem Forum-Kollegen zugemutet werden kann. X(

    VB.NET-Quellcode

    1. Label1.Text = (CDbl(TextBox1.Text.Replace(".", ",")) * CDbl(TextBox2.Text.Replace(".", ","))).ToString
    Dies zu Option Strict On
    @Dodo hat doch die richtige Lösung gepostet. Also lies mal nach und poste anständigen Code.

    VB.NET-Quellcode

    1. Dim d1 As Double = Double.Parse(TextBox1.Text)
    2. Dim d2 As Double = Double.Parse(TextBox1.Text)
    3. Label1.Text = (d1 * d2).ToString

    oder TryParse(), wenn der Text kein numerischer Ausdruck ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Safloc08 schrieb:

    [...] ein Punkt wird als Koma gewertet (Frag mich nicht warum, habs nur aus selbstversuchen herausgefunden :D)
    Nun die Programmiersprache ist ja englisch und im Englischen ist das Dezimaltrennzeichen eben ein Punkt. Nur in wenigen Ländern wie Deutschland ist es ein Komma.

    Damit man sich darum keine Gedanken machen muss, verfügen solche Methoden über ein Globalization Parameter der entsprechend der eingestellen Sprache des Systems die typische Formatierung zulässt.

    VB.NET-Quellcode

    1. Dim d As Double = Double.Parse("1,5", Globalization.NumberStyles.AllowDecimalPoint)
    Dass die Eingabezeichenfolge das falsche Format hat^^
    "hallo" ist zum Beispiel keine Zahl und hat somit das falsche Format...

    Arbeite deshalb mit TryParse, wenn du z.B. auf Benutzereingaben reagierst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Dann guck dir doch die Funkti8on an, das gibt dir einen Boolean zurück und erwartet zwei Werte:
    1. Wert: Was geparst werden soll
    2. Wert: In welche Variable das Ergebnis geschrieben werden soll

    Rückgabewert: Ob die Konvertierung erfolgreich war...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Starz schrieb:

    Bei mir kommt dann eine Fehlermeldung: "Die Eingabezeichenfolge hat das falsche Format." Was soll das heißen :D ?
    Da setzt Du mal den Cursor auf TextBox1.Text und drückst Shift+F9, da zeigt Dir die Umgebung den Wert des Textes an und Du kannst sehen, was falsch ist. Wahrscheinlich steht da ein Punkt als Dezimalseparator, da musst Du ein wenig konvertieren oder die Ländereinstellung vorgeben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Definitiv nein.
    Wie sieht denn der Inhalt der Variable aus, bei deren Konvertierung der Fehler auftritt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wen der Name von dem label ein anderer ist dan kann es dadurch sein zb. wen du jetzt schreibst

    lblAnzeige.Text =

    und du hast den Label (label) genant dan geht da auch nichts mehr
    Den um es richtig zu machen musst du dan auch label schreiben

    label.Text =
    @Ghostix

    Das ja mal sinfrei, da würde der Fehler aber schon vorher angezeigt werden... Der Fehler tritt aber erst beim Konvertieren auf, ich vermute, dadurch das du in Double konvertierst, aber kein Double als Eingabe vorhanden ist, kommt es zu Fehlern.



    Grüße
    Laufzeitfehler - Inhalt der (Text-)Variable, die den Fehler auslöst.
    Ich gehe davon aus, dass Du Fehler zur Entwicklungszeit selbst beheben kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nun, das ist Dein Thread. Läuft es zu Deiner Zufriedenheit oder hast Du noch Probleme?
    Wenn (ja-nein), dann ggf. Bedanken-Button drücken und Thread schließen, wenn (nein-ja), dann auf den Tisch mit Code und Problem. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!