AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN
Thema durchsuchen
Ansicht
Themen-Optionen

Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN

Ein Thema von juergen · begonnen am 6. Mai 2008 · letzter Beitrag vom 7. Mai 2008
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#1

Real immer auf 0,5 bzw. Ganzzahl ABRUNDEN

  Alt 6. Mai 2008, 23:03
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.

Schon mal Danke für Hilfe!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#2

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

  Alt 6. Mai 2008, 23:07
Eine Möglichkeit wäre: verdoppeln, runden, halbieren.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 6. Mai 2008, 23:34
Hallo Nico,
so wie das sehe, entspräche das ganz grob einer kaufmännischen Rundung.
Ich benötige aber immer eine Abrundung.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 6. Mai 2008, 23:45
So geht es wohl auch (nur eine Demo):Edit1.Text:= floattostr(trunc(StrtoFloat(Edit1.Text)/ 0.5)* 0.5);
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#5

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

  Alt 7. Mai 2008, 00:42
Zitat von nicodex:
Eine Möglichkeit wäre: verdoppeln, runden, halbieren.
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;
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 7. Mai 2008, 06:34
Guten Morgen,

danke an alle beteiligten!
Der Vorschlag von silver-moon-2000 liefert das für mich richtige Ergebnis.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#7

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

  Alt 7. Mai 2008, 07:30
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 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