Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konvertierung Double, Ausgabe davon (https://www.delphipraxis.net/205998-konvertierung-double-ausgabe-davon.html)

rwb 8. Nov 2020 07:30

Delphi-Version: 10.3 Rio

Konvertierung Double, Ausgabe davon
 
Hallo,
warum funktioniert das Folgende nicht wie erwartet?

Type TdataPoint=record
isRising: Boolean;
dateTime: TDatetime;
open, high,low,close:Double;
end;

VAR thisPoint:TdataPoint;
tradeOpen; y:String;

tradeOpen:='12843.2105';
with thisPoint do Begin
TextToFloat(PChar(tradeOpen),open, fvExtended);
End;

y:= FormatFloat('#0000.0000#;;', open);
targetMemo.Lines.Append(tradeOpen+' '+ y);

Ausgabe:
12843.2105 0000,0000

erwünscht:
12843.2105 12843.2105

Es ist, als ob kein Wert in thisPoint.open ist bzw er wird nicht richtig konvertiert.
Eure Hilfe wird sehr geschätzt.
Danke

himitsu 8. Nov 2020 07:49

AW: Konvertierung Double, Ausgabe davon
 
Weil es bestimmt unterschiedliche Variablen sind und da nunmal auch unerschiedliche Inhalte drin sind?

Und sehe auch keinen Grund, warum man sich hier unbedingt mit einem nutzlosen WITH das Leben unnötig schwer machen sollten.

Zitat:

Es ist, als ob kein Wert in thisPoint.open ist bzw er wird nicht richtig konvertiert.
Verwendest du überhaupt das thisPoint.open? Sieht nicht so aus.

rwb 8. Nov 2020 08:19

AW: Konvertierung Double, Ausgabe davon
 
Das ganze ist ein Auszug. Im vollständigen Programm steht mehr im 'with do'. Ich gehe davo aus das 'TextToFloat(PChar(tradeOpen),open, fvExtended);' den umgewandelten Wert von tradeOpen in open schreibt.

Lemmy 8. Nov 2020 09:32

AW: Konvertierung Double, Ausgabe davon
 
Zitat:

Zitat von rwb (Beitrag 1476894)
Ich gehe davo aus das 'TextToFloat(PChar(tradeOpen),open, fvExtended);' den umgewandelten Wert von tradeOpen in open schreibt.

Ich gehe auch immer davon aus, dass ich im Lotto gewinne, funktioniert aber halt nicht...

Tipp:
http://docwiki.embarcadero.com/Libra...ls.TextToFloat

da steht was von Rückgabewert. den würde ich als erstes mal auswerten. Und das with weg lassen...


[Edit]
Und vielleicht auch mal versuchen anstelle tradeOpen:='12843.2105'; das hier zu machen
tradeOpen:='12843,2105';

rwb 8. Nov 2020 12:05

AW: Konvertierung Double, Ausgabe davon
 
Danke Lemmy für Deinen Beitrag,
hier kurz OT bei: Lotto stehen die Chance ca 120-140 Millionen zu 1 gegen Dich, das Du (Haupt-)gewinnst, ich hingegen hoffte auf eine gute Chance weil ich natürlich die Hilfe für TextToFloat benutzt habe.
Der Rückgabewert der Funktion TextToFloat ist einmal Boolean. Daher kann ich folgendes machen:
if 'TextToFloat(PChar(tradeOpen),open, fvExtended) then ...
Und zum anderen einen Variable-Parameter, indem der Kode der Funktion einen Rückgabewert schreiben kann/sollte.
Das "with" hatt keinen Einfluß aber ich habe auf Deine Anregung hin noch einmal probiert: thisPoint.open
aber das funktioniert auch nicht besser.
Auch der Austausch des Punktes gegen ein Komma hilft nicht(ich habe es probiert), denn der Formatierungsstring y:= FormatFloat('#0000.0000#;;', thisPoint.open); kann damit umgehen, hier der gekürzte Text der Hilfe dazu:
"Das erste '.'-Zeichen im Format-String bestimmt die Position des Dezimalzeichens im formatierten Wert. Das tatsächlich im Ausgabe-String verwendete Zeichen wird mit der globalen Variable DecimalSeparator bzw. ihrer TFormatSettings-Entsprechung festgelegt.
Ich brauche also immer noch Hilfe, irgendwas mache ich grundlegend falsch.
Rolf

mmw 8. Nov 2020 12:34

AW: Konvertierung Double, Ausgabe davon
 
hallo,
wenn man die function so aufruft

TextToFloat(PChar(tradeOpen),open, fvExtended);

muss open vom Typ Extended sein. (so verstehe jedenfalls die Online Hilfe).

so habe ich es mal getestet.

Delphi-Quellcode:
var open:Extended;
    tradeOpen, y:String;
    ff:TFormatSettings;
    ergebnis:string;

begin
    ff:=TFormatSettings.Create;
    tradeOpen:='12843.2105';

    System.sysutils.TextToFloat(PChar(tradeOpen),open,fvExtended,ff.Invariant);

    ff.DecimalSeparator:='.';

    y:= FormatFloat('#0000.0000#;;', open,ff);

    ergebnis:=tradeOpen+ ' '+y;

    Caption:=ergebnis;
end;
gruß

rwb 8. Nov 2020 13:06

AW: Konvertierung Double, Ausgabe davon
 
Danke, super MMV!
das hatt mir sehr weitergeholfen, es funktioniert so. Ich glaube aber das wesendliche Deiner Anwort war das ganze KnowHow mit TFormatSettings.Create,etc. Ich habe das dann als Herausforderung gesehen und es noch mal mit Double ausprobiert. Wenn man
function TextToFloat(const S: string; var Value: Double; const AFormatSettings: TFormatSettings als Vorlage benutzt geht es auch mit Double. Das ist für mich vorteilhaft, da das Ganze in einer Schleife dann wesendlich schneller läuft.
Nochmals, Du hast mein Wochenende gerettet!
Rolf


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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