Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi "Fehlerhafte" bei Prozentrechnung auf 100% (https://www.delphipraxis.net/180181-fehlerhafte-bei-prozentrechnung-auf-100-a.html)

rhodan 28. Apr 2014 22:29

"Fehlerhafte" bei Prozentrechnung auf 100%
 
Hallo!

ich habe ein kleines berechnunsproblem..

ich habe ein Monats-Umsatz-ziel im editfeld gegeben, genauso wie den Aktuellen umsatz in einem weiteren editfeld.
Anhand eines weiteren feldes lasse ich nun anzeigen wieviel des Monats-Ziels schon erreicht wurden.
dies mache ich mit folgender formel:

Delphi-Quellcode:
prozent.text:= FloatToStr((StrToFloat(Umsatz.Text) / StrToFloat(monatsziel.Text)) *100);
das problem ist das bei einem monatsziel von 20700 schon bei 20690 die 100% angezeigt werden..

ich übergebe das ergebnis der rechnung an ein weiteres editfeld wo die kommastellen weggestrichen werden und das ergebnis dann anhand einer progressbar angezeigt wird:

Delphi-Quellcode:
procedure TForm2.prozentChange(Sender: TObject);
var
zahl3:extended;
begin
zahl3:= strtofloat(prozent.Text);
 prozent.text:= floattostrf ( zahl3, ffFixed, 3, 1);
  prozentlabel.caption.Text:=prozent.Text;
 end;
ich schätze mal der hund liegt im prozent-editfeld begraben, denn wenn ich das im taschenrechner rechne kommt bei 20690 ne 99,95% raus...wieso wird da aufgerundet bzw wie verhindere ich das?

ich komme nicht dahinter wie ich das korrigieren kann das die 100% erst beim vollem Monatsziel angezeigt werden, meine mathekenntnisse sind da nicht so berauschend was formeln angeht, hat jemand nen tip? :oops::oops:

ps: ich weiß es geht programmiertechnisch sicherlich schöner, lach!

prozent.text:= floattostrf ( zahl3, ffFixed, 3, 1);
ich weiß das ich hier auf eine stelle am ende runde, ich könnte das lösen indem ich auf 2 runde, ich frage mich nur ob es auch anders geht

danke!!

Popov 28. Apr 2014 22:44

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
Delphi-Quellcode:
  prozent.text:= FloatToStr((StrToFloat(monatsziel.Text) / StrToFloat(Umsatz.Text)) *100);
//..
Evtl. Monatsziel und Umsatz vertauscht?

Sir Rufo 28. Apr 2014 22:56

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
Preisfrage:

99,95 auf eine Nachkommastelle gerundet (genau das macht
Delphi-Quellcode:
floattostrf ( zahl3, ffFixed, 3, 1)
) ergibt was?
  1. 100,0
  2. 99,9

himitsu 28. Apr 2014 22:59

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
Wenn du nicht willst, daß aufgerundet wird, dann mußt du eben geziehlt abrunden.
Delphi-Referenz durchsuchenTrunc

Uwe Raabe 28. Apr 2014 23:01

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
Du weist im prozentChange dem prozent.Text den gerundeten Wert zu. Abgesehen davon, das dies einen erneuten Change-Event auslöst, wenn sich der Wert dabei ändert, steht dann im prozent-Feld der gerundete Wert. Du solltest den gerundeten Wert besser gleich dem Label zuweisen und im prozent-Feld den nicht-gerundeten Wert stehen lassen.

Grundsätzlich solltest du die Controls nicht als Zwischenspeicher für Rechenschritte mißbrauchen!

Stevie 28. Apr 2014 23:07

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
Bei 5 wird in dem Fall nunmal aufgerundet (siehe Mathematisches Runden).

Wenn ich das richtig verstanden habe, willst du immer abrunden.
Das sollte gehen, indem du vor dem FloatToStrF das hier machst:

Delphi-Quellcode:
zahl3 := Trunc(zahl3 * 10) / 10;

rhodan 28. Apr 2014 23:58

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
danke für die konstruktive kritik euch allen, und stevie für die super lösung..klappt, 100% sind erst bei 20700 erreicht ^_^...ja ich weiß..sauberen code zu schreiben kommt nicht von heute auf morgen :oops: :oops:

Peter666 29. Apr 2014 08:22

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
Sauberer Code kommt meistens am Anfang, unsauber wird er erst nach einiger Zeit. Das ganze geht dann selbst bei aller Liebe uns konsequenten Richtlinien auf Kurz oder Lang gegen den Baum. Kennt wer Hate driven development? Sowas hatte ich vor geraumer Zeit als ein "Neuer" Entwickler mit ins Boot geholt wurde und ich nach nem Review fast seine ganze Arbeit neu schreiben musste. Nur mal so als Beispiel: Threadkommunikation mit einer Booleanvariable absichern. Quasi: FWriteLock: Boolean. Gut das wäre an sich nicht so schlimm auszubügeln mit einem Event, aber das war nur eines von vielen Problemen.
Dennoch scheint die Formel unten falsch. Prozent sollte Umsatz/Monatsziel*100 sein, oder irre ich mich da?

Jumpy 29. Apr 2014 09:02

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
Zitat:

Zitat von Peter666 (Beitrag 1257358)
Sauberer Code kommt meistens am Anfang, unsauber wird er erst nach einiger Zeit. Das ganze geht dann selbst bei aller Liebe uns konsequenten Richtlinien auf Kurz oder Lang gegen den Baum.

Ich glaube rhodan meinte das umgekehrt bzw. setzt früher an: Wenn man das Programmieren lernt und erstmal einfach drauf los "progt", dann programmiert man unsauber und erst mit der Zeit und mit hilfreichen Tips (z.B. hier aus dem Forum) und mit vielem Ärgern über den Sch... den man sich da vor 2 Jahren zusammengestümpert hat und wo man nun selber nicht mehr versteht, was man da eigentlich gemacht hat, lernt man saubereren Code zu schreiben.

Bei deiner Prozentformel mein ich auch, das diese richtig ist, wobei der TE das in #1 auch so geschrieben hat.

rhodan 29. Apr 2014 16:52

AW: "Fehlerhafte" bei Prozentrechnung auf 100%
 
yep jumpy so meinte ich das..

klar ist die formel falsch peter...hast recht. komisch das ich das da reingesetzt habe, bei mir im programm läuft sie richtig...umsatz/monatsziel*100.:?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz