String Format Expotentialschreibweise

mkd

Level-2
Beiträge
197
Reaktionspunkte
30
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich suche nach einer Lösung zur Formatierung eines LREAL nach String in Expotentialschreibweise, wie

Code:
printf("%5E",5000.1234) // Ausgabe 5.000123+003

In der Beckhoff Utilities.lib finde ich den FB_FormatString, quasi genau was ich suche, allerdings wird der Typ E nicht unterstützt.
(Not implemented. Reserved for future use!.)

Hat das mal jemand zu Fuß programmiert und kann einen Denkanstoß geben ?


Gruß
 
Läuft jetzt...

Hier ein Auszug als Ansatz


Code:
IF (...) THEN
 (*Eine Stelle vorm Punkt*)
 (*erste Stelle ist 0 => mit 10 multiplizieren*)
 WHILE(  (STRING_TO_INT(LEFT(sTemp,1)) = 0) AND NOT (lrTemp=0) ) DO
  lrTemp:=lrTemp*10;
  sTemp:=LREAL_TO_FMTSTR(lrTemp,16,TRUE);
  iExponent:=iExponent+1;
 END_WHILE
 
 sTemp:=LREAL_TO_FMTSTR(lrTemp,iWidth,TRUE);      (*auf vorgegebene Anzahl Nachkommastellen Runden*)
 IF (iExponent=0) THEN sTemp:=CONCAT(sTemp,'E+'); ELSE sTemp:=CONCAT(sTemp,'E-'); END_IF
 sTemp:=CONCAT(sTemp,FC_FIX(INT_TO_STRING(iExponent),3, 16#30 , 0)); (*auf drei Stellen mit Nullen füllen*)

ELSE
 (*mehrere Stellen vorm Punkt*)
 WHILE ( STRING_TO_INT(LEFT(sTemp,2)) > 9) DO
  lrTemp:=lrTemp/10;
  sTemp:=LREAL_TO_FMTSTR(lrTemp,16,TRUE);
  iExponent:=iExponent+1;
 END_WHILE
 
 sTemp:=LREAL_TO_FMTSTR(lrTemp,iWidth,TRUE);      (*auf vorgegebene Anzahl Nachkommastellen Runden*)
 sTemp:=CONCAT(sTemp,'E+');
 sTemp:=CONCAT(sTemp,FC_FIX(INT_TO_STRING(iExponent),3, 16#30 , 0)); (*auf drei Stellen mit Nullen füllen*)
END_IF
 
Zurück
Oben