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 immer auf 0,5 bzw. Ganzzahl ABRUNDEN (https://www.delphipraxis.net/113375-real-immer-auf-0-5-bzw-ganzzahl-abrunden.html)

juergen 6. Mai 2008 23:03


Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
 
Hallo zusammen,
ich habe einiges gesucht, einiges probiert, aber bis jetzt nicht das richtige gefunden.
Leider funktioniert auch meine Hilfe in D2007 nicht.

Ich suche eine Möglichkeit alle Zahlen auf den nächstmöglichen 0,5er Wert ABZURUNDEN.
0,4649 = 0
0,5 = 0,5
0,51 = 0,5
12,1555 = 12,0
12,49999 = 12,0
12,51 = 12,5
12,97445 = 12,5

Das Ganze soll zur Berechnung von Urlaubsanspruch dienen, wenn jemand im laufenden Jahr anfängt und somit nur anteiligen Urlaub erhält.
In diesem Fall wäre es eine Arbeitgeberfreundliche Berechnung. :cry:

Schon mal Danke für Hilfe!

nicodex 6. Mai 2008 23:07

Re: Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
 
Eine Möglichkeit wäre: verdoppeln, runden, halbieren.

juergen 6. Mai 2008 23:34

Re: Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
 
Hallo Nico,
so wie das sehe, entspräche das ganz grob einer kaufmännischen Rundung.
Ich benötige aber immer eine Abrundung.

bitsetter 6. Mai 2008 23:45

Re: Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
 
So geht es wohl auch (nur eine Demo):
Delphi-Quellcode:
Edit1.Text:= floattostr(trunc(StrtoFloat(Edit1.Text)/ 0.5)* 0.5);

silver-moon-2000 7. Mai 2008 00:42

Re: Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
 
Zitat:

Zitat von nicodex
Eine Möglichkeit wäre: verdoppeln, runden, halbieren.

Zitat:

Zitat von juergen
Hallo Nico,
so wie das sehe, entspräche das ganz grob einer kaufmännischen Rundung.
Ich benötige aber immer eine Abrundung.

Wenn man nach dem Multiplizieren mit 2 immer abrundet, passt es:
Delphi-Quellcode:
uses Math;

  ZahlAus := floor(2 * ZahlEin) / 2;

juergen 7. Mai 2008 06:34

Re: Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
 
Guten Morgen,

danke an alle beteiligten!
Der Vorschlag von silver-moon-2000 liefert das für mich richtige Ergebnis. :thumb:

nicodex 7. Mai 2008 07:30

Re: Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
 
Ich hätte explizit "abrunden" schreiben sollen :)
Wenn du möchstest, dass negative Zahlen auch abgerundet werden (in Richtung 0), dann solltest du Trunc statt Floor verwenden:
Delphi-Quellcode:
var
  Foo: Real;
  Bar: Real;
begin
  Foo := 0.9999999999999999{9}; // Next 9 will result in 1.0
  Bar := Trunc(Foo * 2) / 2;
  ShowMessage(FloatToStr(Bar));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 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