Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Matheprobleme mit round (https://www.delphipraxis.net/67599-matheprobleme-mit-round.html)

R2D2 17. Apr 2006 13:58


Matheprobleme mit round
 
Hallo!

Ich habe ein Problem mit der Funktion round. Laut Delphi wird 58,5 nicht auf 59 gerundet, sondern auf 58. :wiejetzt:

Was soll ich tun?

inherited 17. Apr 2006 14:00

Re: Matheprobleme mit round
 
Wie wärs damit:
Delphi-Quellcode:
round(Zahl*100) / 100

Dax 17. Apr 2006 14:03

Re: Matheprobleme mit round
 
Hm, ich erinner mich an eine Variable Delphi-Referenz durchsuchenRoundMode, die das rundungsverhalten bestimmt... Könnt auch anders heißen :gruebel:

Flare 17. Apr 2006 14:08

Re: Matheprobleme mit round
 
Zitat:

Zitat von inherited
Wie wärs damit:
Delphi-Quellcode:
round(Zahl*100) / 100

Du weißt aber, dass das nichts bringt, oder? Das rundet auf 2 Stellen nach dem Komma, aber bei .5 immer noch ab!


Flare

R2D2 17. Apr 2006 14:10

Re: Matheprobleme mit round
 
Danke! Ich arbeite jetzt so:
Delphi-Quellcode:
round(Zahl+0.01);
Anscheinend rundet round immer bei .5 Werten ab.

Hawkeye219 17. Apr 2006 14:11

Re: Matheprobleme mit round
 
Nicht ganz! Siehe hier

Gruß Hawkeye

Eichhoernchen 17. Apr 2006 14:11

Re: Matheprobleme mit round
 
Delphi-Quellcode:

Hinweis:   Die Funktionsweise von Round kann mit der Prozedur Set8087CW oder der Funktion SetRoundMode gesteuert werden.


Unit Math


type TFPURoundingMode = (rmNearest, rmDown, rmUp, rmTruncate);
function SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode;

Beschreibung

Mit SetRoundMode können Sie festlegen, welchen Rundungsmodus die FPU verwendet. Der Rundungsmodus kann folgende Werte annehmen:

Wert   Bedeutung

rmNearest   Rundet zum nächsten Wert.
rmDown   Rundet gegen minus unendlich.
rmUp   Rundet gegen plus unendlich.
rmTruncate   Schneidet den Wert ab. Positive Werte werden auf-, negative Werte abgerundet.
Man wird wohl dann auf rmnearest setzen müssen und dann müsste Round auch "richtig" runden


Edit: Habs mal getestet, kommt das selbe raus.

Aber wenn ich round(1.5) mache kommt 2 raus aber bei round(58.5) = 58
das Verhalten versteh ich dann nicht. Scheint aber nur bei 1.5 so zu sein, bei 0.5 und 2.5 macht er das selbe wie bei 58.5

Eichhoernchen 17. Apr 2006 14:24

Re: Matheprobleme mit round
 
Man köntne aber:

Delphi-Quellcode:
function mathround(x : real) : integer;
Begin
 if frac(x) >= 0.5  //frac liefert den das nach dem ,
   then result := ceil(x) //rundet auf
   else result := trunc(x); //runded ab
end;
man müsste nur mal gucken wie es bei negativen Zahlen aussieht

Flare 17. Apr 2006 14:26

Re: Matheprobleme mit round
 
@Eichhörnchen: Gucke mal wo Hawkeye219 hingelinkt hat!
Zitat:

Zitat von Hawkeye219
Nicht ganz! Siehe hier

Gruß Hawkeye


Flare

Eichhoernchen 17. Apr 2006 14:28

Re: Matheprobleme mit round
 
ach mist... den hab ich übersehen

hab aber fast das gleiche nur stimmt wohl mein trunc net..

Daher nochmal:
Delphi-Quellcode:

function mathround(x : real) : integer;
Begin
if frac(x) >= 0.5  //frac liefert den das nach dem ,
   then result := ceil(x) //rundet auf
   else result := floor(x); //runded ab
end;

Dax 17. Apr 2006 14:34

Re: Matheprobleme mit round
 
Zitat:

Zitat von Eichhoernchen
Edit: Habs mal getestet, kommt das selbe raus.

Aber wenn ich round(1.5) mache kommt 2 raus aber bei round(58.5) = 58
das Verhalten versteh ich dann nicht. Scheint aber nur bei 1.5 so zu sein, bei 0.5 und 2.5 macht er das selbe wie bei 58.5

Das liegt, da verwett ich meine Flecken drauf, daran, das der Rechner das intern wahrscheinlich als 58.499999999999867 oder sowas gespeichert hat..

xaromz 17. Apr 2006 14:39

Re: Matheprobleme mit round
 
Hallo,
Zitat:

Zitat von Dax
Das liegt, da verwett ich meine Flecken drauf, daran, das der Rechner das intern wahrscheinlich als 58.499999999999867 oder sowas gespeichert hat..

Schade um die Flecken... :mrgreen:
Zitat:

Zitat von Hawkeye219
Nicht ganz! Siehe hier

Gruß
xaromz

Eichhoernchen 17. Apr 2006 14:49

Re: Matheprobleme mit round
 
Um dann nochmal festzuhalten:
Delphi-Quellcode:

round(2.5) = 2
round(3.5) = 4
round(4.5) = 4
round(5.5) = 6
round(6.5) = 6
....
D.h., wie auch auf der Seite beschrieben wird, dass immer auf die gerade Zahl gerundet wenn ein Wert genau dazwischen liegt.

Aber
Delphi-Quellcode:
round(2.6) = 3 //hoff ich
D.h. nur wenn eine Zahl genau zwischen zweien liegt, gilt diese Regel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz