![]() |
Wert zu einem Faktor hin runden
Gibt es eine schnelle Möglichkeit einen Wert (z.B. 142) zu einem bestimmten Wert hin zu runden (z.B. 7)?
Also z.Zt. gehe ich da folgendermaßen vor:
Delphi-Quellcode:
Allerdings soll das Ergebnis eine Ganzzahl sein und der Faktor ist ein Extended. (Wert ist eine Ganzzahl)!
Round(Round(Wert / Faktor) * Faktor)
|
Re: Wert zu einem Faktor hin runden
Wenn du komplett bei Integer-Arithmetik bleiben möchtest:
Delphi-Quellcode:
var
wert, faktor : integer; begin wert := 1000; faktor := 7; wert := ((wert+(faktor div 2)) div faktor) * faktor; end; |
Re: Wert zu einem Faktor hin runden
Problem: Faktor ist ein Extended
Zitat:
|
Re: Wert zu einem Faktor hin runden
Zitat:
Delphi-Quellcode:
var
wert, ifaktor : integer; faktor : extended; begin wert := 1000; faktor := 7.0; ifaktor := round(faktor); wert := ((wert+(faktor div 2)) div faktor) * faktor; end; |
Re: Wert zu einem Faktor hin runden
Zitat:
|
Re: Wert zu einem Faktor hin runden
Zitat:
Delphi-Quellcode:
Und was soll jetzt das Ergebnis der Operation sein?
wert := 1000;
faktor := 10.5; |
Re: Wert zu einem Faktor hin runden
Okay, dann versuche ich es mal:
Du hast einen Rotwert (0-255). Und jetzt kann er nicht alle Wert haben (also 0-255), sondern nur 1/6 - 6/6 haben kann (also immer sechstel). Ich mache mal ein Beispiel: Zitat:
|
Re: Wert zu einem Faktor hin runden
@xZise: Dein erster Code geht doch genau in die richtige Richtung, nur das äußere Round ist natürlich Quatsch.
Delphi-Quellcode:
@shmia: Etwas verständlicher ausgedrückt: Gesucht werde das Vielfache von y mit dem kleinsten Abstand zu x.
function RoundTo2(AValue: Integer; ADingens2: Extended): Extended;
begin Result := ADingens2 * Round(AValue / ADingens2); end; begin Writeln(RoundTo2(142, 7.5)); // Ergibt 142,5 Readln; end. |
Re: Wert zu einem Faktor hin runden
Okay... Mal darauf bezogen das ich eionen Integer wiederhaben wollte, hat sich damit die Frage geklärt. Geht es noch "schneller"?
|
Re: Wert zu einem Faktor hin runden
Aha. 3/6 (bzw. 3/6 * 255) ist also eine Ganzzahl, alles klar :stupid: .
Und wie soll das noch schneller gehen, außer vielleicht mit ASM und SSE o.Ä.? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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