Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Eine Zahl runden


V!P3R - Di 24.03.09 20:30
Titel: Eine Zahl runden
Hi,
Ich hab eine zahl, zum beispiel 3,14159265 (die steht jez in einem Edit) und möchte diese jetz auf drei nachkommastellen runden.
wie mache ich das?

MfG


jakobwenzel - Di 24.03.09 20:33

Guck dir FloatToStrF und/oder Format an.


Dude566 - Di 24.03.09 20:44

Das geht mit Round.

KLICK MICH [http://forum.chip.de/java-delphi-pascal/runden-delphi-570036.html]


jakobwenzel - Di 24.03.09 21:00

Jo, das rundet die Zahl, aber es kann wegen der Ungenauigkeit beim Speichern von Fließkommazahlen dazu kommen, dass dann einige 0en ausgegeben werden und dann ab der 10. Nachkommastelle Zahlenmüll anfängt.


GlasshouseManor - Do 26.03.09 23:32

Zum Runden auf 3 Nachkommastellen nimmst Du Deine Zahl *1000, machst ein TRUNC und dividierst wieder durch 1000. Dann hast Du den Zahlenmüll wech.


Xentar - Do 26.03.09 23:36

Edit: Ähh, hab mich vertan, sorry.


Boldar - Do 26.03.09 23:37

Dann ist aber nicht gerundet:

Quelltext
1:
2:
3:
2,8888888~2,889
und nicht
2,8888888~2,888


P-A-L - Do 26.03.09 23:51

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Dann ist aber nicht gerundet:

Quelltext
1:
2:
3:
2,8888888~2,889
und nicht
2,8888888~2,888


Dann macht man halt

Delphi-Quelltext
1:
zahl := ( trunc(round(zahl*1000)) / 1000 );                    


GTA-Place - Fr 27.03.09 00:04

Oder man nimmt die fertige Funktion RoundTo, wie oben schon verlinkt, dann kann man sich diese umständliche Version sparen.


alzaimar - Fr 27.03.09 08:29

Da nicht alle Gleitkommazahlen exakt abzubilden sind, ist es ergo auch unmöglich jede Zahl mit z.B. zwei Nachkommastellen in einem Double exakt abzubilden. Das ist so und lässt sich nicht ändern. Am Besten, man ignoriert diesen umstand beim rechnen und rundet nur entsprechend, um die Zahl darzustellen.