Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wert zu einem Faktor hin runden (https://www.delphipraxis.net/71931-wert-zu-einem-faktor-hin-runden.html)

xZise 22. Jun 2006 16:32


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:
Round(Round(Wert / Faktor) * Faktor)
Allerdings soll das Ergebnis eine Ganzzahl sein und der Faktor ist ein Extended. (Wert ist eine Ganzzahl)!

shmia 22. Jun 2006 17:06

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;

xZise 22. Jun 2006 17:12

Re: Wert zu einem Faktor hin runden
 
Problem: Faktor ist ein Extended
Zitat:

[Fehler] &&&&&& E2015 Operator ist auf diesen Operandentyp nicht anwendbar

shmia 22. Jun 2006 17:45

Re: Wert zu einem Faktor hin runden
 
Zitat:

Zitat von xZise
Problem: Faktor ist ein Extended

Du kannst/musst die Variable Faktor zuvor einmal runden:
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;

xZise 22. Jun 2006 17:53

Re: Wert zu einem Faktor hin runden
 
Zitat:

Zitat von shmia
Du kannst/musst die Variable Faktor zuvor einmal runden:

Problem ist dann, dass es kein Vielfaches mehr vom Faktor ist ;)

shmia 22. Jun 2006 17:57

Re: Wert zu einem Faktor hin runden
 
Zitat:

Zitat von xZise
Problem ist dann, dass es kein Vielfaches mehr vom Faktor ist ;)

Dann mach mal ein vollständiges Beispiel, damit man versteht was gemeint ist.
Delphi-Quellcode:
wert := 1000;
faktor := 10.5;
Und was soll jetzt das Ergebnis der Operation sein?

xZise 22. Jun 2006 18:05

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:

Farbwert: 125
Auf die Sechstel bezogen ergibt das 3/6!

Khabarakh 22. Jun 2006 18:07

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:
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.
@shmia: Etwas verständlicher ausgedrückt: Gesucht werde das Vielfache von y mit dem kleinsten Abstand zu x.

xZise 22. Jun 2006 18:09

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"?

Khabarakh 22. Jun 2006 18:22

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 07:38 Uhr.
Seite 1 von 2  1 2      

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