| Autor |
Beitrag |
kongreddgrass
      
Beiträge: 238
Win 98, Win 2000, Win Xp Prof.,Linux 8.2 Prof
Delphi 6
|
Verfasst: Fr 29.02.08 16:41
Hallo,
Ich gebe in ein Edit-Feld eine Zahl ein. Dann soll der nach einem Klick auf OK die eingegebene Zahl bei 75% und 200% auf jeweils 2 Labels ausgeben.
Das komische ist, das Programm müsste normal auch bei einem Wert von unter hundert teilen, aber der macht des ab dem Wert 100.
Das versteh ich einfach nicht.
oder ich bin zu blöd dafür
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var Eingabe,UGrenze,OGrenze,UnterG,OberG:integer; begin Eingabe:=StrToInt(Edit1.Text); UGrenze:=(Eingabe div 100) * 75; OGrenze:=(Eingabe div 100) * 200; UnterG:=Trunc(UGrenze + 0.5); OberG:=Trunc(OGrenze + 0.5); Label4.caption:=(FloatToStr(OberG)); Label5.caption:=(FloatToStr(UnterG)); end; |
_________________ o.o
Zuletzt bearbeitet von kongreddgrass am Sa 01.03.08 14:00, insgesamt 2-mal bearbeitet
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Fr 29.02.08 16:48
div ist die ganzzahlige Division, d.h. wenn Eingabe kleiner als 100 ist, ergibt Eingabe div 100 immer 0. Du musst also (Eingabe / 100) * ... schreiben oder gleich Eingabe * 0.75 bzw. Eingabe * 2.
Damit das funktioniert, noch die entsprechenden Variablen als Single/Double/Extended (je nach gewünschter Genauigkeit) deklarieren.
|
|
kongreddgrass 
      
Beiträge: 238
Win 98, Win 2000, Win Xp Prof.,Linux 8.2 Prof
Delphi 6
|
Verfasst: Fr 29.02.08 17:07
sry^^ ich benutze Delphi 6 Personal ich weis nicht ob das da geht?
also wenn ich des so umbaue:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var Eingabe,UGrenze,OGrenze,UnterG,OberG:integer; begin Eingabe:=StrToInt(Edit1.Text); UGrenze:=Eingabe / 100 * 75; OGrenze:=Eingabe / 100) * 200; UnterG:=Trunc(UGrenze + 0.5); OberG:=Trunc(OGrenze + 0.5); Label4.caption:=(FloatToStr(OberG)); Label5.caption:=(FloatToStr(UnterG)); end; |
dann meckert der Compiler beim Integer, ich denk mal wegen den Kommazahlen.
Aber ich check das nie mit den Kommazahlen, ich weis das Kommazahlen Real sind.
Wenn jemand meinen Fehler ausbessern würde das wär cool mit ner Erklärung wieso das so ist.
Ich wäre euch dafür echt dankbar! 
_________________ o.o
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Fr 29.02.08 17:19
nagel hat folgendes geschrieben: |
Damit das funktioniert, noch die entsprechenden Variablen als Single/Double/Extended (je nach gewünschter Genauigkeit) deklarieren. |
Ach, selbst zitieren macht doch Spaß  .
Nein, also wie gesagt, und wie du eigentlich auch selbst schon gesagt hast, sind UGrenze und OGrenze Kommazahlen und brauchen deshalb den entsprechenden Typ, also einen der oben genannten oder auch Real (ist afaik das selbe wie Double).
Also:
Delphi-Quelltext 1: 2: 3:
| var Eingabe, UnterG, OberG: Integer; UGrenze, OGrenze: Real; |
Hoffe jetzt war's verständlicher.
|
|
kongreddgrass 
      
Beiträge: 238
Win 98, Win 2000, Win Xp Prof.,Linux 8.2 Prof
Delphi 6
|
Verfasst: Fr 29.02.08 17:32
ok, jetzt hab ich das gecheckt, wie den Zahlen Typen zugewiesen werden.
Double usw. war mir neu, ich kannte bereits das Real.
Allerdings wenn ich das kompiliere, sagt mein Compiler: "Identifier Redeclared: UGrenze"
Das Problem versteh ich jetzt nicht. Wie gesagt ich muss erstmal wieder in Delphi reinkommen 
_________________ o.o
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Fr 29.02.08 17:43
kongreddgrass hat folgendes geschrieben: |
Allerdings wenn ich das kompiliere, sagt mein Compiler: "Identifier Redeclared: UGrenze"
|
bedeutet, du hast die Deklaration für UGrenze zweimal drin
_________________ Gruß Aga
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 29.02.08 19:41
Es gibt für solche Fälle übrigens auch eine WinAPI-Funktion MulDiv, mit deren Hilfe man zuerst *75 rechnen kann und danach durch 100 teilen kann (ganzzahlig) und die sich um die korrekte Behandlung großer Zahlen (bei den Zwischenergebnissen) kümmert.
Insgesamt gilt bei Berechnungen eigentlich fast immer: Zuerst multiplizieren, dann dividieren ... Dann klappt's auch mit dem Ergebnis 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|