Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Real zur nächst kleineren Ganzzahl abrunden (https://www.delphipraxis.net/61466-real-zur-naechst-kleineren-ganzzahl-abrunden.html)

delphiNoob 21. Jan 2006 19:26


Real zur nächst kleineren Ganzzahl abrunden
 
Hallo

Wie der Titel schon sagt, möchte ich einen Real-Wert auf die nächst kleinere Ganzzahl runden, also 2,9 nicht zu 3 sondern zu 2.


Danke schon im vorraus

ichbins 21. Jan 2006 19:32

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Delphi-Quellcode:
setroundmode(rmdown);
round(2.9);
weitere roundmodes:

Code:
rmdown -> immer abrunden (minuszahlen auch)
rmup -> immer aufrunden (minuszahlen auch)
rmtruncate -> Wert abschneiden [-2,9] -> [-2] / [2,9] -> [2]
rmnearest -> normaler Rundungsmodus, bei .5-Werten auf gerade Zahl runden

3_of_8 21. Jan 2006 19:34

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Wie wärs mit trunc(zahl);?

delphiNoob 21. Jan 2006 19:59

Re: Real zur nächst kleineren Ganzzahl abrunden
 
danke für die schnelle antwort, funktioniert perfekt! Danke

Alexander Roth 21. Jan 2006 20:17

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Zitat:

weitere roundmodes:

Code: markieren
rmdown -> immer abrunden (minuszahlen auch)
rmup -> immer aufrunden (minuszahlen auch)
rmtruncate -> Wert abschneiden [-2,9] -> [-2] / [2,9] -> [2]
rmnearest -> normaler Rundungsmodus, bei .5-Werten auf gerade Zahl runden
Na ja bisschen selten und umständlich.


Häufig gebrauch und auch kurz sind diese hier:

- trunc(real) Alle Nachkommastellen werden abgerundet und das ist das gleiche wie immer abrunden
- round(zahl) Rundet nicht mathematisch richtig sondren siehe unten (...richtiger Mist...)
- roundto(zahl,-i) Rundet bis zur i-ten Stelle (geht auch im positiven bereich)

Khabarakh 21. Jan 2006 21:36

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Zitat:

Zitat von Alexander Roth
- round(zahl) Rundet mathematisch richtig

Nope, Round verwendet das sogenannte "Banker´s Rounding".

3_of_8 21. Jan 2006 21:38

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Was ist da der Unterschied?

AFAIK runden beide bei Nachkommastelle <5 ab und bei >=5 auf.

Grishnak 21. Jan 2006 21:42

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Ich habe Bankkaufmann gelernt, als Kassierer und als Kreditberater gearbeitet, aber von diesem "Bankers Rounding" habe ich das erstemal in der Delphi-Hilfe gelesen! Welcher "Banker" wo auf der Welt verwendet diese Sch**** eigentlich? Und für was? :wall:

@3_of_8: 1,5 und 2,5 würde zu 2 gerundet (nämlich zur nächsten geraden Zahl)! :roteyes:

3_of_8 21. Jan 2006 21:47

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Was für einen Sinn macht es, zur nächsten geraden Zahl zu runden?

xaromz 21. Jan 2006 21:49

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Hallo,
Zitat:

Zitat von 3_of_8
Was für einen Sinn macht es, zur nächsten geraden Zahl zu runden?

Siehe Wikipedia

Gruß
xaromz

tn249 21. Jan 2006 22:05

Re: Real zur nächst kleineren Ganzzahl abrunden
 
oder ganz einfach abrunden mit floor()

bzw aufrunden mit ceil()

Gruß
Thomas

alzaimar 21. Jan 2006 22:15

Re: Real zur nächst kleineren Ganzzahl abrunden
 
trunc schnippelt den Nachkommaanteil ab, liefert einen integer, int macht das Gleiche, liefert jedoch einen Extended.
Wer korrekt runden möchte, sollte sowas versuchen:
Delphi-Quellcode:
Function CorrectRound (aValue, aGranularity : Extended) : Extended;
Begin
  Result := Int (aValue/aGranularity + 0.5)*aGranularity;
End;
Beispiele:
Delphi-Quellcode:
Begin
  a := CorrectRound (1237.567, 0.10); // 1237,600
  a := CorrectRound (1237.567, 0.01); // 1237,570
  a := CorrectRound (1237.567, 1.00); // 1238,000
  a := CorrectRound (1237.567, 10.00); // 1240,000
  a := CorrectRound (1237.567, 0.25); // 1237,500
  a := CorrectRound (1237.567, 2.00); // 1238,000
  a := CorrectRound (1237.567, 5.00); // 1240,000
...

EDatabaseError 16. Mai 2006 13:24

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Zitat:

Zitat von tn249
oder ganz einfach abrunden mit floor()

bzw aufrunden mit ceil()

Gruß
Thomas

Ausgrab...

Delphi-Quellcode:
ResultI := ceil(Result);
der Befehl ceil ist Undefiniert??? Hä... brauch ich noch was in uses? Delphi 2005 PE


Mfg
Tobi

DGL-luke 16. Mai 2006 13:32

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Naja, was braucht man denn, wenn man mathematische Funktionen sucht?

EDatabaseError 16. Mai 2006 13:34

Re: Real zur nächst kleineren Ganzzahl abrunden
 
Zitat:

Zitat von DGL-luke
Naja, was braucht man denn, wenn man mathematische Funktionen sucht?

Danke. Leider ist die Hilfe von D 2005 PE so doof die findet nur jeden 3. Befehl! Da ist ja die von D3 Besser!!!

Byby

Mfg
Tobi


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.

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