Delphi-PRAXiS
Seite 1 von 2  1 2      

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Seite 1 von 2  1 2      

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