REAL-Zahl mit Nachkommastelle

siegener19

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

ich habe folgendes Problem:

REAL1:= (TP_Istwert_Geschwindigkeit_Auf_REAL *100.0);
INT1:= REAL_TO_INT (REAL1);
REAL2:= INT_TO_REAL(INT1) * (0.01); (*Divison 100*)

Durch diese Anweisungen erhalte ich eine Zahl mit zwei Nachkommastellen.

Das Problem ist jetzt, dass ich als Ergebnis 8.e^-002 bekomme. Mir wäre es lieber, wenn da einfach 0.08 stünde. Weiß jemand vielleicht Rat? Arbeite mit Twincat 2.
 
Hallo,
das ist nur ein Anzeige- bzw. Darstellungsproblem, 8.0e-002 ist der selbe Wert wie 0.08. Wo willst Du denn die 0.08 sehen? Ein Ausgabefeld einer Visu? Stelle bei der Ausgabe ein, daß Du den REAL-Wert im Format '0.00' angezeigt bekommen willst. Wenn das nicht möglich ist, dann konvertiere selber den REAL-Wert in einen String mit dem gewünschten Format z.B. mit der Function LREAL_TO_FMTSTR oder mit dem Function_Block FB_FormatString.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

die REAL2:= 0.08 sollen hier rein :

FILEDATA := CONCAT (FILEDATA,REAL_TO_STRING(REAL2));

und dann in eine CSV-Datei rein. in der CSV steht dann so ein Mist wie 8,00E+12 . Warum weiß ich auch nicht. Glaube da stimmt was mit der Umwandlung in String nicht.

Hier mal ein Bild mit dem REAL Wert 0.13
 

Anhänge

  • Winde.jpg
    Winde.jpg
    17,2 KB · Aufrufe: 40
Bei REAL_TO_STRING kann man das Ausgabeformat nicht beeinflussen. Diese Konvertierung entscheidet sich halt manchmal für die Exponential-Schreibweise. Ich kenne Twincat nicht, doch anscheinend gibt es keine (öffentlich zugängliche) exakte Dokumentation, nach welchen Regeln REAL_TO_STRING den Ausgabestring erzeugt (wie leider bei so vielen Sachen, die aus Codesys kommen). Das ist wie bei VB, was schnelle Erfolgserlebnisse liefert für Programmierer, welche eigentlich nicht recht wissen, was sie tun, aber Hauptsache es kommt irgendwas vorzeigbares 'raus.

Ich empfehle LREAL_TO_FMTSTR gleich mit dem original REAL-Wert zu benutzen, ohne vorher zusätzlich verfälschende Rechenoperationen auszuführen oder Ziffern abzuschneiden, dann wird wenigstens meistens richtig gerundet, z.B. LREAL_TO_FMTSTR(0.46523,2,TRUE) ergibt korrekte '0.47'
Also etwa so:
Code:
FILEDATA := CONCAT(FILEDATA, LREAL_TO_FMTSTR(TP_Istwert_Geschwindigkeit_Auf_REAL, 2, TRUE));

Harald
 
Zurück
Oben