FloatToStr

  • 1
  • 2
  • Page 1 of 2
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

FloatToStr

 · 
Posted: 16.07.2018 - 14:30  ·  #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
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: FloatToStr

 · 
Posted: 16.07.2018 - 14:36  ·  #2
Quote by 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
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: FloatToStr

 · 
Posted: 16.07.2018 - 15:25  ·  #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
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: FloatToStr

 · 
Posted: 16.07.2018 - 17:01  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: FloatToStr

 · 
Posted: 16.07.2018 - 20:10  ·  #5
Hallo Rage,

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

rolf
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: FloatToStr

 · 
Posted: 17.07.2018 - 08:30  ·  #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
Attachments
Filename: FloatProblem.rar
Filesize: 64.91 KB
Title:
Download counter: 36
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: FloatToStr

 · 
Posted: 18.07.2018 - 12:03  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: FloatToStr

 · 
Posted: 20.07.2018 - 14:22  ·  #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
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   140   155 · Page-Gen-Time: 0.032238s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI