badmaxx
Goto Top

Komma problem

Hi @ all
ich versuche gerade einen (taschen)rechner zu programmiern nur bekomme ich es nich hin dass ich in die Textbox eine Kommazahl eingeben kann und dann das richtige Ergebnis bekomme. DAs komische ist wenn ich z. B. 5*5,5 kommt 15 raus wenn ich jetz aber 5*5.5 eigbebe kommt 27,5 raus. Wie schaff ich es dass ich 5,5 eingeben kann und trozdem das richtige Ergebnis bekomme? Ich benutze VB 2005 Express Edition.

Danke im Voraus

Gruß
MAxi

Content-Key: 47319

Url: https://administrator.de/contentid/47319

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: bastla
bastla 24.12.2006 um 20:18:09 Uhr
Goto Top
Hallo badmaxx!

Wenn Du den in die Textbox eingegebenen Text für eine Berechnung verwendest, solltest Du ihn eigentlich ohnehin konvertieren, zB mit CDbl() - damit wird auch das entsprechende Dezimaltrennzeichen erkannt.

Ansonsten bleibt Dir nur das gezielte Umwandeln des Kommas in einen Punkt in der Berechnung - Replace(TextBox1.Text, ",", ".") - oder die Umwandlung ohne Rücksicht auf die Optik direkt bei der Eingabe - dazu schreibst Du in "TextBox1_KeyPress"
If e.KeyChar = "," Then e.KeyChar = "."  
Empfehlen kann ich Dir aber nur die oben angesprochene Typkonvertierung.

Grüße
bastla
Mitglied: badmaxx
badmaxx 27.12.2006 um 20:13:47 Uhr
Goto Top
Hi
danke schonmal für die hilfe.
Könntest du mir das genauer erklären wie ich des machen muss da ich noch nicht so lange mit vb arbeite.
Danke im voraus.
Gruß
Maxi
Mitglied: bastla
bastla 27.12.2006 um 20:18:12 Uhr
Goto Top
Hallo badmaxx!

Im Prinzip musst Du nur in die Ausführung der Berechnung die Konvertierung einbauen - könnte ich Dir aber besser zeigen, wenn Du den entsprechenden Code postest ...

Grüße
bastla
Mitglied: badmaxx
badmaxx 27.12.2006 um 23:09:58 Uhr
Goto Top
Public Class Algebra

    Private Sub Grundrechenarten_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label3.Visible = False
        Format(TextBox1.Text, "0,00")  

    End Sub

    Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click


    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        End
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If RadioButton1.Checked = True Then
            Replace(TextBox1.Text, ",", ".")  
            TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text) 'Addition  
        End If


        If RadioButton2.Checked = True Then TextBox3.Text = Val(TextBox1.Text) - Val(TextBox2.Text) 'Subtraktion  

        If RadioButton3.Checked = True Then TextBox3.Text = Val(TextBox1.Text) * Val(TextBox2.Text) 'Multiplikation  

        If RadioButton4.Checked = True Then TextBox3.Text = Val(TextBox1.Text) / Val(TextBox2.Text) 'Division  

        If RadioButton5.Checked = True Then
            TextBox3.Text = Val(TextBox1.Text) * Val(TextBox1.Text) 'Berechnung des Quadrats  
            TextBox2.Visible = True
            TextBox2.Text = TextBox1.Text
            Label2.Text = "x"  
        End If

        If RadioButton6.Checked = True Then 'Berechnung der Wurzel  
            TextBox3.Text = Math.Sqrt(TextBox1.Text)
            Label2.Visible = False
        End If



    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.Visible = False 'Zurück  
        Start.Visible = True
    End Sub

    Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
        If RadioButton1.Checked = True Then
            TextBox2.Visible = True
            Label3.Visible = False
            Label2.Text = "+"  
        End If

    End Sub

    Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
        If RadioButton2.Checked = True Then
            TextBox2.Visible = True
            Label3.Visible = False
            Label2.Text = "-"  
        End If
    End Sub

    Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged
        If RadioButton3.Checked = True Then
            TextBox2.Visible = True
            Label3.Visible = False
            Label2.Text = "x"  
        End If
    End Sub

    Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged
        If RadioButton4.Checked = True Then
            TextBox2.Visible = True
            Label3.Visible = False
            Label2.Text = "/"  
        End If
    End Sub

    Private Sub RadioButton6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton6.CheckedChanged
        If RadioButton6.Checked = True Then
            TextBox2.Visible = False
            Label3.Visible = True
            Label2.Text = ""  
        End If
    End Sub

    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
        Format("0,000")  
    End Sub

    Private Sub RadioButton5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton5.CheckedChanged
        If RadioButton5.Checked = True Then
            TextBox2.Visible = False
            Label3.Visible = False
            Label2.Text = "²"  
        End If
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged 
    End Sub
End Class
ich hoff du kennst dich aus.
Mitglied: bastla
bastla 28.12.2006 um 12:43:03 Uhr
Goto Top
Hallo badmaxx!

Du konvertierst im Prinzip ohnehin schon mit Val(), sodass Du nur stattdessen CDbl() dafür einsetzen müsstest:
If RadioButton1.Checked = True Then
    TextBox3.Text = CDbl(TextBox1.Text) + CDbl(TextBox2.Text) 'Addition  
End If
Wenn Du die Anzeige auf 2 Dezimalen runden willst (wie Du es in "Grundrechenarten_Load" versuchst, wo es aber nichts bringt), kannst Du den Formatcode "F" verwenden (oder benutzerdefiniert "0.00" - mit Punkt!):
If RadioButton1.Checked = True Then
    TextBox3.Text = Format(CDbl(TextBox1.Text) + CDbl(TextBox2.Text), "F") 'Addition  
End If

Grüße
bastla
Mitglied: badmaxx
badmaxx 28.12.2006 um 15:36:47 Uhr
Goto Top
DANKE!!!!!!!!!!!!!!!!!!!!!!!!!!
Es funktieoniert so wie es soll!
DANKE!!!!!!!!!!!!!!!!!!!!!!!!!!

Gruß
Maxi

PS. Des mit "F" geht nicht aber mit "0.00" funktieonierts
Mitglied: badmaxx
badmaxx 28.12.2006 um 15:36:58 Uhr
Goto Top
DANKE!!!!!!!!!!!!!!!!!!!!!!!!!!
Es funktieoniert so wie es soll!
DANKE!!!!!!!!!!!!!!!!!!!!!!!!!!

Gruß
Maxi
Mitglied: badmaxx
badmaxx 28.12.2006 um 15:37:30 Uhr
Goto Top
DANKE!!!!!!!!!!!!!!!!!!!!!!
Es funktieoniert so wie es soll!!
DANKE!!!!!!!!!!!!!!!!!!!!!!

Gruß
Maxi