FloatToStr

  • 1
  • 2
  • Seite 1 von 2
rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

FloatToStr

 · 
Gepostet: 16.07.2018 - 14:30 Uhr  ·  #1
Hallo

ich habe in der neuen Version (5.09.41) das Problem das FloatToStr häufig Probleme verursacht und dann Werte anzeigt wie -1.9454E38 oder auch 1.9454E38. Also Häufig ist sowas wie innerhalb einer Minute 60xScreenrefresh, mit 5 Fehlern.
FloatToStr rufe ich in den Anzeige und Konvertierroutionen mit
Code

FloatToStr(InternTemperatur:6:2:' ')
FloatToStr(F : 7 : 2 : '0'); 
FloatToStr(EndPointData[Index].Value:5:2:'0');

auf. Bisher (bisher habe ich mit der 5.09.16 gearbeitet) kam bei diesen Werten halt immer 0.00 raus, was ja auch korrekt ist. Die Werte kommen aus diversen Berechnungen und habe sicherlich solch kleine Werte, die Berechnungen sind ja auch immer korrekt, nur die Formatierung halt nicht. Ich möchte ungern eine eigene Krücke bauen, so in der Art
Code

function FloatToStr_Ex(F:Float):String[20];
var Res:string[10];
begin
  if (F<0.001) and (-0.001>F) then
    Res:='0.00';
  else
    Res:=FloatToStr(f:5:2:'0');
  endif;
  Return(Res);
end;
weil es ja bis dato fehlerfrei funktionierte. Kann sich das mal bitte jemand ansehen.
P.S. Ich arbeite ohne Optimiser, falls das wichtig ist.

cu rage
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: FloatToStr

 · 
Gepostet: 16.07.2018 - 14:36 Uhr  ·  #2
Zitat geschrieben von rage

Hallo

ich habe in der neuen Version (5.09.41) das Problem das FloatToStr häufig Probleme verursacht und dann Werte anzeigt wie -1.9454E38 oder auch 1.9454E38. Also Häufig ist sowas wie innerhalb einer Minute 60xScreenrefresh, mit 5 Fehlern.
FloatToStr rufe ich in den Anzeige und Konvertierroutionen mit
Code

FloatToStr(InternTemperatur:6:2:' ')
FloatToStr(F : 7 : 2 : '0'); 
FloatToStr(EndPointData[Index].Value:5:2:'0');

auf. Bisher (bisher habe ich mit der 5.09.16 gearbeitet) kam bei diesen Werten halt immer 0.00 raus, was ja auch korrekt ist. Die Werte kommen aus diversen Berechnungen und habe sicherlich solch kleine Werte, die Berechnungen sind ja auch immer korrekt, nur die Formatierung halt nicht. Ich möchte ungern eine eigene Krücke bauen, so in der Art
Code

function FloatToStr_Ex(F:Float):String[20];
var Res:string[10];
begin
  if (F<0.001) and (-0.001>F) then
    Res:='0.00';
  else
    Res:=FloatToStr(f:5:2:'0');
  endif;
  Return(Res);
end;
weil es ja bis dato fehlerfrei funktionierte. Kann sich das mal bitte jemand ansehen.
P.S. Ich arbeite ohne Optimiser, falls das wichtig ist.

cu rage


Hallo Rage,

benutzt Du Processe oder Tasks? Wenn ja könnte der Refresh in die Berechnung hauen und die Werte an das Display senden, die noch nicht fertig berechnet sind.
rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

Re: FloatToStr

 · 
Gepostet: 16.07.2018 - 15:25 Uhr  ·  #3
Hallo pvs-deck,
nein benutzte ich in diesem Falle nicht, die Werte kommen vom Mess-AVR dort werden zwar Processe verwendet, die Werte werden verrechnet, wenn alle Daten eingesammelt sind. In diesem Fall stehen dann alle Processe und werden erst nach der Verechnung wieder gestartet, das läuft einwandfrei seit vielen Monaten. Im Anzeige-AVR geht alles schön der Reihe nach, das kann dort nicht zum diesem Fehler führen.
Aber danke für die Anregung.

cu rage
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: FloatToStr

 · 
Gepostet: 16.07.2018 - 17:01 Uhr  ·  #4
Und wie kommen die Werte vom Mess-AVR zum Anzeige-AVR?

Sowas hatte ich in der Vergangeheit mal mit einem Interbus-System, es wurden Daten übertragen zum Touchpanel und bevor alle Daten übertragen wurden, wurden diese Fehlerhaft auf dem Touchpanel Angezeigt.

Das hatte ich mit einen RX-Counter am Ende der Daten bereinigt, sobald die Daten am Ende mit einen neuen Counter vorhanden waren, wurden diese komplett gesichert und erst dann zum Touchpanel übertragen.

Gruß
Thorsten
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: FloatToStr

 · 
Gepostet: 16.07.2018 - 20:10 Uhr  ·  #5
Hallo Rage,

bitte ein paar Zeilen Source mit entspr. Parametern etc
wo ich das nachvollziehen kann.

rolf
rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

Re: FloatToStr

 · 
Gepostet: 17.07.2018 - 08:30 Uhr  ·  #6
Guten Morgen

ich habe wie gewünscht ein paar Zeilen Testprogramm geschrieben. Im Kern
Code

  EnableInts($87);
  F:=0.000043563;
  loop
    Erg:=F / 23.12;
    Str:=FloatToStr(Erg:8:2:'0');
    F:=Erg;

  endloop;

1. Durchlauf alles korrekt, Ergebnis ist 1.8842127E-6=0.000043563/23,12 Str=00000.00
2.Durchlauf nicht korrekt Ergebnis ist 8.1497085E-8=1.8842127E-6/23,12 Str=00000E-8

ich wünsche Euch allen einen schönen Tag
cu rage
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: FloatToStr

 · 
Gepostet: 18.07.2018 - 12:03 Uhr  ·  #7
Hallo Rage,

du könntest auch Float*100 in (je nach Anzeigebereich) Integer/LongInteger umwandeln und die Ausgabe mit
IntToStr(Var:6:2:' ')
machen. Sind dann gesamt 6 Stellen (inkl. dem Kommazeichen) mit 2 Nachkommastellen.

Gruss
Harry
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: FloatToStr

 · 
Gepostet: 20.07.2018 - 14:22 Uhr  ·  #8
Hallo rage,
ich bin da dran, nur steige ich nicht ganz durch!
Wo ist der Fehler?
In der String Konvertierung???

Rein formal bleibt 000000E-8 immer noch NULL

rolf
  • 1
  • 2
  • Seite 1 von 2
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 14 · Cache Hits: 14   140   154 · Page-Gen-Time: 0.044058s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI