![]() |
kaufmännisch auf 0,5 oder 1 runden
Hallo zusammen,
ich versuche nun schon seit einiger Zeit ein bestimmtes Rundungsergebnis zu erreichen. Habe auch schon vieles hier gelesen und auch ausprobiert, aber ich konnte mein Problem damit leider noch nicht selbstständig lösen. :oops: Generell benötige ich eine Rundung, wo als Ergebnis immer nur eine Null oder eine 5 hinter dem Komma stehen soll; abhängig von dem Ergebnis der kaufmännischen Rundung. Quasi in 0,5er Einheiten kaufmännisch runden, anstelle der gewohnten 1er Einheiten. Beispiele: 12,2499 -> 12,0 12,25 -> 12,5 12,49 -> 12,5 12,5 -> 12,5 12,74 -> 12,5 12,75 -> 13,0 13,24454645 -> 13,0 Könnte mir hier jemand weiterhelfen? Vielen Dank schon mal im Voraus! |
Re: kaufmännisch auf 0,5 oder 1 runden
Die 12,50 ist ein Knackpunkt. Aber das hier auch ? :shock:
Zitat:
|
Re: kaufmännisch auf 0,5 oder 1 runden
Delphi-Quellcode:
müsste hinhaun ;)
round(x*2)/2
greetz Mike |
Re: kaufmännisch auf 0,5 oder 1 runden
@Hansa,
ja, so soll/ muss es sein sein :wink: @JasonDX, Round hatte ich hier bei meiner kaufmännischen Rundung auf Grund des Verhaltens (Bankers Rounding) gar nicht in Betracht gezogen. Dein Vorschlag funktioniert schon fast perfekt, vielen Dank! :thumb: Allerdings wird z.B. bei 12,25 auf 12 abgerundet, ich benötige allerdings genau ab 12,25 das Ergebnis -> 12,5, also eine Aufrundung. Als Workaround könnte ich 0.0000000001 vor dem Round hinzuzählen... Hat noch jemand einen Lösungsansatz? |
Re: kaufmännisch auf 0,5 oder 1 runden
Zitat:
sag mal, was und wie willste genau runden? nur kaufmännisch runden, ist das nicht... :pale: :pale: |
Re: kaufmännisch auf 0,5 oder 1 runden
@grenzgaenger,
du hast Recht, das richtige kaufmännische Runden ist es natürlich nicht. Ich möchte im Prinzip in 0,25er Schritten kaufmänisch runden, anstelle in 0,5er Schritten. Mein Anwendungsfall: Ermittlung von Urlaubsanspruch beim Arbeitsbeginn im lfd.Jahr. :wink: Es gibt u.a. die Regelung, dass der Urlaubsanspruch kaufmännisch auf halbe Tage gerundet wird. Wenn dann z.B. ein neuer Mitarbeiter am 15.Mai anfängt und er einen Ganzjahres-Urlaubsanspruch von 28 Tagen hat, so ergäbe das einen Urlaubsanspruch für dieses "angebrochene" Jahr von 17,672131147541 Tagen, "kaufmännisch" auf halbe Tage gerundet wären es dann 17,5 Tagen. Der Knackpunkt ist eben das kaufmännische Runden auf halbe Tage. |
Re: kaufmännisch auf 0,5 oder 1 runden
willst du jetzt in halbe schritte runden (x := trunc(x * 2) / 2) oder in 1/4 (x := trunc(x * 4) / 4)?
PS: ggf. kannst du noch 'n hundertstel dazu zählen... oder round hernehmen |
Re: kaufmännisch auf 0,5 oder 1 runden
Hi juergen!
Was hälst Du denn von einer simplen If-Abfrage?
Delphi-Quellcode:
Cheers,
function myround(z: real): real;
var r: real; begin r := frac(z); if (r >= 0.25) and (r < 0.75) then result := trunc(z) + 0.5 else if (r >= 0.75) then result := trunc(z) + 1 else result := trunc(z); end; Marc [edit] Funktion korrigiert [/edit] |
Re: kaufmännisch auf 0,5 oder 1 runden
Altes kaufm. Runden geht mit "Wert *50 /100" (wennch mich richtig erinner*g*)
|
Re: kaufmännisch auf 0,5 oder 1 runden
:-)
fast hat normal immer das selbe schema abschneiden(betrag * faktor) / faktor wenn aufgerundet werden soll, wird dann noch 'n kleiner betrag hinzugezählt, damit aufgerundet wird, bevor die die stellen abgeschnitten werden... also abschneiden(betrag * faktor + addon) / faktor bei einem hundertstel (zwei dezimalstellen), x = trunc(23,501 * 100 + 0.5) / 100 --> 2350,1 + 0.5 --> 2550,6 --> 2550 --> 25,50 auf diese weise durfte man immer in basic runden... ;-) bei rundung aufs fünferl, ist der faktor 20 ... :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 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