![]() |
Probleme mit StrToFloat
Hallo Zusammen,
ich hänge schon eine ganze Weile an folgendem Problem:
Delphi-Quellcode:
Menge_String wird korrekt angezeigt.
VAR SP_Menge : Extended;
Menge_String : String; begin inherited; DecimalSeparator := ','; Menge_String := String(frm_Behandlungen.DBEdit_Menge.Text); SP_Menge := strtofloat(Menge_String); ....... Bei SP_Menge gibt es keine Veränderung - die Variable hat immer den Wert 0. Auch wenn ich z.B. die Variable SP_Menge : Real; (oder double, ...) setze. Vielleicht kann mir hier jemand helfen. Danke. Gruss Dieter [edit=mkinzler]Delphi-Tag korrigiert Mfg, mkinzler[/edit] |
Re: Probleme mit StrToFloat
1. was soll der typecast nach string()?
2. wieso nicht einfach strtofloat(frm_Behandlungen.DBEdit_Menge.Text)? |
Re: Probleme mit StrToFloat
Das hatte ich auch schon probiert - ohne Erfolg.
|
Re: Probleme mit StrToFloat
Zitat:
|
Re: Probleme mit StrToFloat
das was ich vermutet habe ;)
Delphi-Quellcode:
das sollte helfen
Menge_String :=Stringreplace(Menge_String ,'.',#44,[]);
|
Re: Probleme mit StrToFloat
Der String sieht wie folgt aus: '2,89'
Probiert habe ich auch : '2.89' Stringreplace Menge_String :=Stringreplace(Menge_String ,'.',#44,[]) fürht auch nicht zum Erfolg. |
Re: Probleme mit StrToFloat
Hi,
Hast du mal debuggt und geschaut, was Menge_String vor dem StrToFloat für einen Wert hat? (Evtl. das falsche, leere Edit im Code benutzt?) |
Re: Probleme mit StrToFloat
Da dein code an sich keine Fehler enthält, und strtofloat eine Exception auslösen müsste, wenn irgendwelche nicht verarbeitbaren Zeichen im string sind, tippe ich darauf, dass der Fehler woanders im code ist :gruebel:
|
Re: Probleme mit StrToFloat
Ja, das eine Exception ausgelöst wird schreibt er ja nicht. Vielleicht klappt im Prinzip auch alles (was wir vom Code sehen) korrekt.
Interessant wäre noch, wie er den Wert überprüft. Also etwas mehr vom Code... |
Re: Probleme mit StrToFloat
Ich schaue mir den Wert im Überwachungsmonitor an.
Hier der Code der Prozedure:
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tag eingefügt. Mfg, mkinzler[/edit]
procedure Tfrm_Behandlungen.BitBtn_SpeichernArtikelClick(Sender: TObject);
VAR SP_Einzelpreis : Real; SP_Menge : double; Menge_String : String; begin inherited; DecimalSeparator := ','; SP_Menge := 0.01; Menge_String := '0,01'; // SP_Menge := String(frm_Behandlungen.DBEdit_Menge.Text); // SP_Menge_Float := StrToFloat(SP_Menge); Menge_String := String(frm_Behandlungen.DBEdit_Menge.Text); // Menge_String :=Stringreplace(Menge_String ,'.',#44,[]); SP_Menge := strtofloat(Menge_String); SP_Einzelpreis := StrToFloat(frm_Behandlungen.DBEdit_Menge.Text); // Hier wird letztendlich Menge mit Preis multipliziert und das Ergebnis gespeichert. end; |
Re: Probleme mit StrToFloat
Ziemlich verwirrend, was Du so in dem Beispielcode stehen hast (durch's Testen wohl mehr Chaos als Hilfe entstanden).
Delphi Code-Tags machen das lesen leichter (im Forum-Editor oben "Delphi-Code")
Delphi-Quellcode:
1. Wieso SP_Einzelpreis vom gleichen Datenfeld... Copy+Paste Fehler oder?
procedure Tfrm_Behandlungen.BitBtn_SpeichernArtikelClick(Sender: TObject);
var SP_Einzelpreis : Real; SP_Menge : double; SP_Ergebnis : Currency; // damit das Datentypen-Chaos perfekt wird ;-) begin inherited; // ??? DecimalSeparator := ','; // SP_Menge := 0.01; // Menge_String := '0,01'; SP_Menge := StrToFloat(frm_Behandlungen.DBEdit_Menge.Text); // Wieso Einzelpreis vom gleichen Datenfeld? SP_Einzelpreis := StrToFloat(frm_Behandlungen.DBEdit_Menge.Text); SP_Ergebnis := SP_Einzelpreis * SP_Menge; end; 2. Welchen Wert hat Einzelpreis. Ist der 0, dann ist auch das Ergebnis 0 |
Re: Probleme mit StrToFloat
probier mal die Function StrToFloatSafe aus der Unit JclStrings von Jedi
Delphi-Quellcode:
var
s : String; d : Double; begin s := 'Eine Zahl: 123,45'; d := StrToFloatSafe(s); s := '123,45 Euro'; d := d + StrToFloatSafe(s); ShowMessage('Ergebnis :'+ FloatToStr(d)); // da wird 246,9 angezeigt ach sorry, hab zu schnell gelesen, war ja nicht sein Problem, lass den Post trotzdem mal stehen ... |
Re: Probleme mit StrToFloat
Grundsätzlich war mir immer TryStrToFloat, bzw. auch TryStrToInt lieber,
da so nicht konvertierbare Werte leichter abgefangen werden können. Was mir nicht ganz klar ist: Liest du die Preise aus einer DB aus? Wenn ja mit welchem Zugriff? Falls du ADO verwendest könntest du das Feld mit FieldByName('Wert').AsFloat auslesen und direkt in eine Variable schreiben. Welche Mengen-Einheiten verwendest du? Zur Fehlersuche könntest du evtl. auf die nächst kleinere Einheit wechseln, die als Integerwert angezeigt werden kann. So könntest du einen Fehler in der Floatumrechnung ausschließen. Vielleicht auch falscher Datentyp beim Ergebnis? Überwachungsmonitor ... nur um das auszuschließen: hast du Brakepoints gesetzt, dass der Gute auch was anzeigen kann? Leg lieber mal ein Editfeld an, in dem du deinen Ergebniswert ausgibst. Das war alles was mir grade dazu einfällt, ich weiß jetzt natürlich deinen Kenntnisstand nicht, deswegen vergiss alles, was du schon versucht hast. Gruß, Alpha |
Re: Probleme mit StrToFloat
Hallo Zusammen,
Danke für Eure Unterstützung. Ich hatte Brakepoints gesetzt um die Ergebnisse im Überwachungsmonitor anzuzeigen - der hat leider nichts angezeigt. Geholfen hatte letztendlich die Anzeige der Ergebnisse über ShowMessage (). Gruss Dieter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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