vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Suche Visual-Basic Code
Re: Problem bei meinem MatheTrainer: Zahlen werden aufgerundet  
Autor: svebert
Datum: 16.05.05 11:36

Du rundest die Zahlen ja mit der Funktion Format.
    Ergebnis = Format(Zahl4 + Zahl5, "###,###,##0.00") 'Berechnet das Ergebnis
    lblRechnung.Caption = vbCrLf & _
                          vbCrLf & _
                          vbCrLf & _
                          Format(Zahl4, "###,###,##0.00") & vbCrLf & _
                          Format(Zahl5, "###,###,##0.00") & vbCrLf
Der Fehler entsteht dadurch, dass du mit ungerundeten Zahlen rechnest, aber gerundete Zahlen anzeigst. Ein Beispiel: Interne Rechnung: 10.1351+10.1451=20.2802
gerundet: 20.28 ist das richtige Ergebnis. Dem User zeigst du aber schon die gerundeten Zahlen an:
10.14+10.15. Der rechnet 20.29 und prompt stimmt es mit dem internen Ergebnis nicht über ein! Verstehst du deinen Denkfehler?

So müsstest du den Code umschreiben:

    Zahl4 = Format(Zahl4, "###,###,##0.00")
    Zahl5 = Format(Zahl5, "###,###,##0.00")
    Ergebnis = Zahl4 + Zahl5 'Berechnet das Ergebnis
    lblRechnung.Caption = vbCrLf & _
                          vbCrLf & _
                          vbCrLf & _
                          Zahl4 & vbCrLf & _
                          Zahl5 & vbCrLf
Da deine Zahlen sowieso nicht größer als 200 werden, kannst du bei der Format-Funktion auch Format(Zahl2,"0.00") hin schreiben. ###,##0 besagt ja nur, dass alle 100 ein Punkt gesetzt werden soll. Also wenn du 500000 als Zahl hast, formatiert er das in 500.000. Die größte Zahl die du in Level 5 haben wirst ist 500. Also brauchst du immer nur Format(Zahl,"0.00") schreiben.

Und die Funktion cmdAuswerten würde ich so schreiben:
Private Sub cmdAuswerten_Click()
'Wenn nichts reingeschrieben wurde
If txtErgebnis.Text = "" Then
    MsgBox "Bitte ein Ergebnis eingeben!", vbInformation
    txtErgebnis.SetFocus
    exit sub
 end if
 
lblAufgaben.Caption = Spieldauer - Spielrunde & " von " & Spieldauer & "" & _
  "Rechnungen verbleibend"
 
'Wertet das Ergebnis aus
If Cdbl(txtErgebnis.Text) = Ergebnis Then 
 
'Es werden nur "," als Komma erkannt. 
'Wenn du auch Punkte als Komma erkennen möchtest, musst du mit der 
'Funktion Replace die Punkte im string txtErgebnis.text durch "," ersetzen
 
    MsgBox "Super, das Ergebnis ist richtig!", vbInformation,"Mathetrainer"  
'Sonst steht im Titel der Textbox immer Project1. Und das ist ein bisschen dumm
 
    pgbRichtig.Value = pgbRichtig.Value + 10 'Er bekommt 10 richtige Punkte
    Spielrunde = Spielrunde + 1
    lblAufgaben.Caption = Spieldauer - Spielrunde & " von " & Spieldauer & "" & _
      "Rechnungen verbleibend"     
 
Else
'Wenn Falsch
    MsgBox "Schade, das Ergebnis ist nicht korrekt!" & vbCrLf & vbCrLf & _
    "Das richige Ergebnis währe " & Ergebnis & " gewesen!", vbInformation, _
    "Mathetrainer"
 
    pgbFalsch.Value = pgbFalsch.Value + 10 'Er bekommt 10 falsche Punkte
    Spielrunde = Spielrunde + 1
    lblAufgaben.Caption = Spieldauer - Spielrunde & " von " & Spieldauer & "" & _
      "Rechnungen verbleibend"    
 
End If
 
            If Spielrunde = Spieldauer Then
'Wenn Spiel zu Ende
                MsgBox "Du hast das " & Level & " Level fertig gespielt!" & _
                  vbCrLf & vbCrLf & _
                "Richtige Ergebnisse: " & int(pgbRichtig.Value / 10) & vbCrLf & _
                "Falsche Ergebnisse:  " & int(pgbFalsch.Value / 10), _
                vbInformation
'int() rundet  immer ab. Ist sicherer, sonst hast  du vielleicht mal 3.7343 
'richtige Ergebnisse und du möchtest ja wohl lieber immer ganze Zahlen dort 
' stehen
' haben. Und bei der Progressbar kannst du mit den Eigenschaften min und max das
'Maximale und Minimale Value einstellen. Hier würde wohl min=0 sein und max=10.
 
                Spielrunde = 0
                pgbRichtig.Value = 0
                pgbFalsch.Value = 0
                txtErgebnis.Text = ""
                lblRechnung.Caption = ""
                cmdAuswerten.Enabled = False
                txtErgebnis.Enabled = False
                cmdNewGame.Enabled = True
                Exit Sub
            End If            
 
    cmdNewGame_click 'Es wird nächste Rechnung aufgelistet. 
'Du hattest cmdNewGame.value=true geschrieben. Es ist aber besser einfach den 
' Sub 'aufzurufen. Call cmdNewGame_Click ist auch möglich. 
'In anderen Sprachen hätte der Compiler sofort herum gemeckert
    txtErgebnis.Text = ""
    txtErgebnis.SetFocus
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Problem bei meinem MatheTrainer: Zahlen werden aufg...1.334lacoste15.05.05 16:12
Re: Problem bei meinem MatheTrainer: Zahlen werden ...858svebert15.05.05 19:06
Re: Problem bei meinem MatheTrainer: Zahlen werden ...823lacoste15.05.05 23:13
Re: Problem bei meinem MatheTrainer: Zahlen werden ...823svebert16.05.05 11:36
Re: Problem bei meinem MatheTrainer: Zahlen werden ...893lacoste16.05.05 12:47
Re: Problem bei meinem MatheTrainer: Zahlen werden ...872svebert17.05.05 14:50
Re: Problem bei meinem MatheTrainer: Zahlen werden ...854lacoste17.05.05 16:48
Re: Problem bei meinem MatheTrainer: Zahlen werden ...859svebert17.05.05 16:55
Re: Problem bei meinem MatheTrainer: Zahlen werden ...859lacoste17.05.05 18:36

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel