Rechenproblem

Hallo zusammen,

ich habe mir einen Rechner geschrieben, der aus 5 Eingaben einen Wert errechnet. Der sechste Wert, den der Benutzer eingibt ist eine Obergrenze für das Ergebniss. Leider funktioniert das nicht so wie gedacht.
Der Rechner macht alles wie er es soll bis zu einem Maximalwert von 9999. Sobald ich als Obergrenze 10000 eingebe ist die Obergrenze immer das Ergebniss und das bis zu einem Wert von 55000. Danach funktioniert er wieder.
Da es vorher und nachher funktioniert, denke ich schon, daß die Rechnung selber stimmt, aber leider habe ich keine Ahnung was da noch sein kann.
Die Variablen, mit denen gerechnet werden habe ich als Long definiert.

Kann mir da vielleicht jemand auf die Sprünge helfen?

Gruss

Christian

Hallo
Probier doch mal andere Variablentypen , wie zum Beispiel Single .
Niemand weiß , was Du geschrieben hast .
Mein Tip :
Wenn Du es selber genau prüfen möchtest ohne den Code zu senden , was da schief läuft , dann setze Haltepunkte in den Code und überwache alle Variablen im entsprechendem Fenster Schritt für Schritt . Bei VB 5 geht das .
MfG

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hier die Rechnung mit den Variablen

var8 = ((var1 / 10) * (var2 / 10) * var3 * var4 * (var5 / 100) * (var6 / 100)) / 10

Danach kommt dann die Überprüfung

Select Case var8
Case Is > kapazit.Text
Kontrolle.Caption = Int(kapazit.Text)
End Select
Select Case var8
Case Is

Hi!

Also, irgendwas stimmt da in deiner Beschreibung nicht! Erst sagst du

ich habe mir einen Rechner geschrieben,
der aus 5 Eingaben einen Wert errechnet.
Der sechste Wert, den der Benutzer eingibt
ist eine Obergrenze für das Ergebnis

Dann nennst du die Berechnungsformel

Hier die Rechnung mit den Variablen

var8 = ((var1 / 10) * (var2 / 10) * var3 * var4 * (var5 / 100)
* (var6 / 100)) / 10

Wenn ich richtig gezählt habe, stecken in der Berechnung 6 und nicht 5 Variablen.

Dann sind, soweit ich es verstanden habe, alle Variablen als Long deklariert. Das ist einerseits hochgradig riskant, weil es dir bei Multiplikationen relativ schnell den Speicherplatz zerreisst (es sei denn, du hast Obergrenzen für die einzelen Variablen festgelegt, die du hier nicht genannt hast), andererseits werden die Werte ungenau bei Divisionen, da du die Nachkommastellen verlierst (1234 / 100 ist als Long-Wert eine 12. 1289 / 199 ergibt 13. Die Nachkommastellen werden weggerundet).

Mit Werten wie

var1 = 500
var2 = 1000
var3 = 1500
var4 = 2500
var5 = 3500
var6 = 5000

reisst es var8 auseinander!

Tip: Zerleg die Berechnung in Einzelschritte, dann kannst du mit dem Debugger schnell herausfinden, wo es hakt:

var1 = var1 / 10
var2 = var2 / 10
var5 = var5 /100
var6 = var6 / 100

var1 = var1 * var2
var3 = var3 * var4
var5 = var5 * var6

var8 = var1 * var3 * var5
var8 = var8 / 10

Und deine „Select case“-Abfragen solltest du zu einem Select-case zusammenfassen, sonst machen die keinen Sinn als Select-case

Grüße
Heinrich

Hallo
Da kannst Du auch ein Zahlenformat für Kommazahlen nehmen .
Außerdem ist Text ein anderes Datenformat wie ein Zahlenformat .
Da solltest Du erstmal umwandeln , mit val(Textxyz) , meinetwegen auch int(val(textxyz)).
MfG

Hallo Heinricht,

danke für die Ausführliche Antwort.

Natürlich hast Du recht und es sind 6 Variablen.
Ich habe nun mal Deinen Vorschlag durchgeführt und die Variablen sofort durch die konstanten geteilt.

Das sieht dann so aus:

var1 = tplatzheimv / 10
var2 = tplatzauswv / 10
var3 = stheimv
var4 = stausv
var5 = epreisv / 100
var6 = entfernungv / 100
var8 = (var1 * var2 * var3 * var4 * var5 * var6) / 10

Die Case Schleife habe ich auch angepasst:

Select Case var8
Case Is > kapazit.Text
Kontrolle.Caption = Int(kapazit.Text)
Case Else
Kontrolle.Caption = Int(var8)
End Select

Das Problem bleibt aber gleich. Der Rechner funktioniert tadellos bis zu einer Maximumeingabe von 10000 und danach wieder ab einem Maximum von 55000.
Das sagt mir (auch wenn es mein erstes Basic Programm ist), daß der Rechner doch im Grunde funktioniert, er aber irgendwo einen kleinen Fehler hat.

Hi Matthias,

1000 Dank. So hat sich das Problem anscheinend gelöst, denn der Rechner funktioniert nun einwandfrei!

Nochmals vielen Dank

Christian

Hallo Heinrich,

Problem gelöst.

Gruss

Christian