Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Preise runden (https://www.delphipraxis.net/23158-preise-runden.html)

needatip 29. Mai 2004 20:44


Preise runden
 
Hallo,

ich möchte in meiner Datenbank Preise runden.
Alle Preise sind mit 2 Nachkommastellen versehen.
Einstellige Preise die unter 10 € liegern sollen auf einen einstelligen Wert gerundet werden.
Zweistellige Preise, die zwischen 10 u. 99 € liegen sollen auf 5 € genau gerundet werden.
Dreistellige Preise, die zwischen 100 u. 999 € liegen sollen auf 10 € genau gerundet werden.
Vierstellige Preise, die zwischen 1000 u. 9999 € liegen sollen auf 100 € genau gerundet werden.
usw.

Hat jemand schon so eine Funktion o. ähnliches programmiert.

Wäre für schnelle Hilfe dankbar.

:?:

Keldorn 29. Mai 2004 21:20

Re: Preise runden
 
Hallo

mit datenbanken mach ich nix, aber du hast die Frage ja auch nicht in der Datenbank rubrik gewählt :P

bis auf die 5 euros ist das runden einfach: entweder round verwenden und die beträge mit einem faktor dividieren und wieder multiplizieren, oder roundto verwenden (macht aber im Prinzip genau das gleiche).

Delphi-Quellcode:
  ListBox1.Items.Add(FloatToStr(round( 543.21/10 )*10));
  ListBox1.Items.Add(FloatToStr(roundTo( 543.21 ,1)));  //uses math, weiß nicht, ab welcher delphi-version das dabei ist
Mfg Frank

Keldorn 29. Mai 2004 21:35

Re: Preise runden
 
und für den 5-steller kannst du ja mal das probieren:
Delphi-Quellcode:
function Runden5(d:double):double;
Var x:double;
  begin
    //zweistelligen Anteil entfernen
    x:=frac(d/10)*10;

    if x<2.5 then d:=d-x
     else if (x>=2.5) and (x<5) then d:=d+(5-x)
      else if (x>=5) and (x<7.5) then d:=d-x+5
       else d:=d+(10-x);

    result:=d;
  end;
Mfg Frank

HaJo 29. Mai 2004 21:36

Re: Preise runden
 
Hallo, grüß Dich,

ich habe einige Rechnungsprogramme im Umlauf :-D

Meine Erfahrung nach der Umstellung auf den Euro - bloß nicht in der DB runden! Erst recht nicht mit der Round-Funktion von Delphi.

Sinnvollerweise sollte das bei der Anzeige erst mit Endbeträgen geschehen, sonst summieren sich die Rundungsfehler beim addieren!

Die meisten Reportgeneratoren haben eine etsprechend bessere Rundungsfunktion.

Lieben Gruß, Jochen

needatip 30. Mai 2004 11:45

Re: Preise runden
 
Erst mal vielen Dank für die Tips.

Es sollte aber nicht nur auf eine Stelle gerundet werden, sondern je nach Stellenanzahl wie oben angegeben.
Vielleicht stelle ich mich auch nur so dumm an ?
Hier ein paar Beispiele.

4,35 € (5,-€)
14,76 € (15,-€)
22,13 € (20,-€)
78,89 € (80,-€)
108,20 € (100,-€)
139,40 € (150,-€)
345,17 € (350,-€)
1.688,04 € (1.700,-€)
8.278,13 € (8.300,-€)

Es kann auch ein Routine sein, die nicht mit einer einzigen Funktion alles abdeckt.

Danke im voraus.

Keldorn 30. Mai 2004 21:31

Re: Preise runden
 
Zitat:

Vielleicht stelle ich mich auch nur so dumm an ?
keine ahnung, solange du keinen Code von dir zeigst.

Zitat:

4,35 € (5,-€)
wären nach der aufgabenstellung meiner meinung nach 4€

wie das mit dem runden geht, steht alles schon da, entweder roundto oder round mit divid. und multi. mit unterschiedlichen Faktoren. du mußt dir halt noche eine if-abfrage basteln, die je nach zahlengröße die richtige Rundungsfunktion aufruft.

Delphi-Quellcode:
if zahl<10 then runden_einstellung...
 else if zahl<100 then ...
  else if zahl<1000 then ...
Mfg Frank

needatip 31. Mai 2004 09:11

Re: Preise runden
 
Alles klar,
Jetzt hab ichs geschnallt.

Vielen Dank nochmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 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