# Real Variable Nachkommastellen



## boggle (7 August 2009)

Moin,

ich hab da eine Real Variable(TC PLC), die bei einem Sollwert von 0 ,eine recht viele Nachkommastellen hat. Z.B. 0,00000004673
Mich interessieren aber nur die ersten 3. Also 0,000
Diese Variable muss ich mit einer anderen auf 0 vergleichen,
was aber bei den Nachkommastellen so gut wie unmöglich ist.

Hat da jemand einen Lösungsvorschlag?
Danke
Gruß Boggle


----------



## Larry Laffer (7 August 2009)

Hallo,
ich würde sie in einen INT wandeln. Ggf. wenn du die Nachkommastellen irgendwo noch brauchst (außer bei der =0 -Geschichte) erst mit 1000 multiplizieren und dann in einen DINT wandeln.

Gruß
LL


----------



## Ralle (7 August 2009)

Oder als 2. Möglichkeit einen Fensterbaustein einsetzen, der einen Vergleich mit einer anzugebenden Hysterese macht, also z.Bsp. +-0,001. Das ist bei Realzahlen ohnehin fast nicht anders zu machen.


----------



## hugo (11 August 2009)

schau dir mal die oscat library an dort gibt es einige bausteine die dir das leben leicher machen

rnd und round runden einen  real auf n digits oder n digits hinter dem komma.

wenn du werte vergleichen möchtest und n stellen beachtet werden sollen empfehle ich dir den baustein cmp dieser prüft zwei real werte ob die ersten n stellen übereinstimmen samt rundung usw..

beachten solltest du aber das ein 32 bit real nur 7-8 stellen abbilden kann.


----------



## Majestic_1987 (13 August 2009)

Schließe mich den Vorrednern an. 

Es ist UNERLÄSSLICH den Wert auf hinreichend wenige Stellen zu Runden. Wichtig ist vor allem, dass es wahrscheinlich ist, dass bei der vorgenommenen Rundung der Fall x = 0 auch eintreten kann.

Es gibt im Internet eine Seite die von fatalen Katastrophen berichtet, die auf Softwarefehler zurückzuführen sind. Eine davon ist der Fall, in welchem ein US-Marschflugkörper dutzende Menschen tötete weil intern eine Berechnung den gewünschten Vergleichswert nie annehmen konnte.

Ergo: Runde auf 1 oder 2 Stellen, sofern das vertretbar ist. Im besten Fall auf Integer mit REAL_TO_INT(x). Oder vergleiche auf -0.1 < x < 0.1

Beides ist okay.


----------

