![]() |
Aufrunden auf den nöchsten 5 oder 10er
Hallo zusammen
habe ein Problem das ich einen Wert immer auf den nächsten 5er oder 10er Aufrunden muss. z.B. 0.5 > 5 2 > 5 5.1 > 10 8 > 10 könte mir da wer helfen? Habe es schon die Suche Verwendent aber leider nichts gefunden. Shalom Manfred |
Re: Aufrunden auf den nöchsten 5 oder 10er
Delphi-Quellcode:
gZahl := (Zahl DIV <schritt> + 1) * <schritt>;
|
Re: Aufrunden auf den nöchsten 5 oder 10er
teil die Zahl durch fünf, schneide die Kommastellen ab (floor) und multipliziere (das Ergebniss+1) mit 5.
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Delphi-Quellcode:
edit: verschrieben^^
if (Zahl mod 5) > 0 then
Zahl := (Zahl div 5 + 1) *5; |
Re: Aufrunden auf den nöchsten 5 oder 10er
0,5 div 5 ?
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Zitat:
|
Re: Aufrunden auf den nöchsten 5 oder 10er
stimmt... 0.5 div 5 geht nicht
Zitat:
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Ihr Seid ja alle Super schnelllll :wink:
Zitat:
E2015 Operator not applicable to this operand type
Delphi-Quellcode:
(var_1 + var_2 div 5 + 1) * 5;
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Delphi-Quellcode:
gZahl := (Trunc(Zahl) DIV <schritt> + 1) * <schritt>;
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Nein, denn da kommt für alle Vielfachen von 5 das falsche Ergebnis raus. Ich schlage vor:
Delphi-Quellcode:
gZahl := Ceil(Zahl/<schritt>) * <schritt>;
|
Re: Aufrunden auf den nöchsten 5 oder 10er
oder
Delphi-Quellcode:
if (((Zahl - Trunc(Zahl)) > 0) or ((Trunc(Zahl) mod 5) > 0)) then
Zahl := (Trunc(Zahl) div 5 + 1) * 5; |
Re: Aufrunden auf den nöchsten 5 oder 10er
Danke für die vielen Vorschläge von Euch allen! :thumb:
Habs mit der Variante von mkinzler gelöst:
Delphi-Quellcode:
Shalom
gZahl := (Trunc(Zahl) DIV <schritt> + 1) * <schritt>;
Manfred |
Re: Aufrunden auf den nöchsten 5 oder 10er
der rundet dann aber die 5 zur 10 auf
die beste Methode ist IMHO die von Apollonius:
Delphi-Quellcode:
Du musst allerdings noch die Unit Math in die uses aufnehmen.
Zahl := Ceil(Zahl/5) * 5;
Wenn du das nicht willst kannst du meine Funktion nehmen:
Delphi-Quellcode:
Allerdings funktioniert die nicht mit negativen Zahlen, zB -5,3
if (((Zahl - Trunc(Zahl)) > 0) or ((Trunc(Zahl) mod 5) > 0)) then
Zahl := (Trunc(Zahl) div 5 + 1) * 5; |
Re: Aufrunden auf den nöchsten 5 oder 10er
warum nehmt ihr nicht einen simplen Vergleich?
Delphi-Quellcode:
if Zahl <= 5 then Ergebnis := 5 else
if ((Zahl >5) and (Zahl <= 10)) then Ergebnis := 10; |
Re: Aufrunden auf den nöchsten 5 oder 10er
Zitat:
|
Re: Aufrunden auf den nöchsten 5 oder 10er
achso, sorry, aus der Anfangsfrage hatte ich entnommen, dass es nur um Zahlen bis 10 geht ;)
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Rein mathematisch
( Ganzzahl ( ( Zahl / 5 ) – 0,01 ) * 5 ) + 5 mfg |
Re: Aufrunden auf den nöchsten 5 oder 10er
Wozu -0.01, wenn man fragen darf :gruebel:
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Hallo NamenLozer
Um sicherzustellen das bei der Zahl 5.0 es mir den Multiplikator 0 liefert Denn 5/5 = 1 1 – 0,01 = 0,99 // 0,01 bis max 0,09 bei 1/10 schritten Ganzzahl von 0,99 = 0 Wie gesagt Rein mathematisch Getestet mit Excel mfg |
Re: Aufrunden auf den nöchsten 5 oder 10er
Zitat:
[*]Dass er es jedoch geschafft hat, das "<schritt>" in den (bzw. zumindest meinen) HTML-Code zu schmuggeln, finde ich etwas beängstigend :gruebel: :stupid: . Zitat:
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Also mit Rein mathematisch meinte ich nicht das die anderen Lösungsvorschläge NICHT MATHEMATISCH sind sondern das ich keine Delphi Syntax liefern kann weil ich nicht das wissen dafür habe und es mit Microsoft Excel getestet habe.
Ich hoffe das ich niemanden auf die Füße getreten bin und hoffe das auch niemand mir auf die Füße treten will mfg |
Re: Aufrunden auf den nöchsten 5 oder 10er
Zitat:
|
Re: Aufrunden auf den nöchsten 5 oder 10er
Ein bisschen Code zum testen
Delphi-Quellcode:
mfg
procedure TForm1.Timer1Timer(Sender: TObject);
var s : string; begin i := i + 0.1; str(I:2:2,S); label1.Caption := s; x := (Floor(((I/5)-0.01))*5)+5; str(x,S); label2.Caption := s; end; |
Re: Aufrunden auf den nöchsten 5 oder 10er
Zitat:
Noch ein kleiner Hinweis zu deiner Formel (abgesehen davon, dass du daraus gefahrlos ein paar Klammern entfernen kannst): Einen Epsilon-Wert von 0,01 halte ich eindeutig für zu hoch. Allerdings ist es gar nicht leicht, einen guten Wert dafür auszuwählen, ich würde wohl i * Math.DoubleResolution benutzen[*] (was selbst 5.0000000001 noch richtig umwandeln würde). Da diese Konstante aber gar nicht im interface-Teil deklariert ist, mache ich mir dann doch lieber das Leben etwas leichter ;) und benutze Apollonius' Version, die das ganze Problem elegant umgeht. [*]Oder natürlich Extended, Hauptsache nicht Single bei solchen Aufgaben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 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