Toon posts:

[delphi] functie m.b.t. "currency"

Pagina: 1
Acties:

Verwijderd

Topicstarter
Morgen,

vraagje: Ik lees een "money" veld uit een Microsoft SQL Server. Deze waarde is bijvoorbeeld: € 110,00. Als ik deze waarde koppel aan een label, dan wordt het: [b]110[b] Nou is dat Euroteken het probleem niet, maar het gaat mij natuurlijk om die ",00".

Weet iemand hoe ik dat oplos?

(In de onderstaande 3 regels worden de waarden toegekend aan de labels)

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure UpdateOfferteTotaal(actie : integer);
var Totaal : Currency;
begin
  getRec('Offertes','OfferteID',FormOfferte.OfferteID); 
  Totaal := data.QTemp.FieldByName('Totaal').AsCurrency;
  case actie of 
    0: begin
         Totaal := Totaal - data.QOfferte.FieldByName('Prijs').AsCurrency;
       end;
    1: begin
         Totaal := Totaal + data.QOfferteCat.FieldByName('Prijs').AsCurrency;
       end;
  end; //case actie of
  FormOfferte.lblOfferteEX.Caption := CurrToStr(RoundTo(Totaal,-2));
  FormOfferte.lblOfferteBTW.Caption := CurrToStr(RoundTo(Totaal*0.19,-2));
  FormOfferte.lblOfferteINC.Caption := CurrToStr(RoundTo((Totaal*0.19)+Totaal,-2));



Ik ben nog niet zolang met programmeren bezig dus neem me niet kwalijk als er rare constructies inzitten. :)

[ Voor 72% gewijzigd door Verwijderd op 27-05-2003 09:11 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12:08

Creepy

Tactical Espionage Splatterer

Eerst even een tip: kijk eens naar de [ code ] en [ /code ] tags (maar dan zonder spatie dus ;) ). Dan krijgt je code meteen een layout ala deze\
Delphi:
1
2
3
4
procedure woei
begin
 // mooie lay-out
end;

En voor je decimaal probleem: Kijk eens naar CurrToStrF. Die is overigens makkelijk in de help te vinden als je met de cursor op CurrToStr gaat staan, op F1 drukt (dan komt de help omhoog met de currtostr functie), en dan bij "See also" kijkt :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
CurrToStrF... thanks.

Wat betreft die spaties, dat komt door GOT, die laat de spaties weg, ik spring netjes in.

  • grizzlybear
  • Registratie: Oktober 2001
  • Laatst online: 28-07 10:33
Het komt volgens mij door die RoundTo, deze rond het toch af? Volgens mij verlies je daardoor je decimalen. Kijk ook maar eens naar formatfloat...

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Verwijderd schreef op 27 May 2003 @ 08:43:

Wat betreft die spaties, dat komt door GOT, die laat de spaties weg, ik spring netjes in.
Dat komt niet door Got, dat komt omdat je geen code-tags gebruikt. ;)

https://fgheysels.github.io/


Verwijderd

Topicstarter
grizzlybear schreef op 27 May 2003 @ 08:45:
Het komt volgens mij door die RoundTo, deze rond het toch af? Volgens mij verlies je daardoor je decimalen. Kijk ook maar eens naar formatfloat...
RoundTo werkt wel goed.
want stel dat totaal 13,2899999 is.
dan geeft RoundTo(Totaal,-2) netjes 13,29 terug.

Maar stel nou dat totaal 13,29999 is.
dan geeft RoundTo(Totaal,-2) 13,3 terug. (waar is nou die laatste nul gebleven??)

Verwijderd

Topicstarter
whoami schreef op 27 May 2003 @ 08:49:
[...]


Dat komt niet door Got, dat komt omdat je geen code-tags gebruikt. ;)
Leg eens uit? welke code tags? :9

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12:08

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 27 May 2003 @ 08:52:
[...]


Leg eens uit? welke code tags? :9
Dat wat ik al uitlegde [ code ] en [ /code ]

Als je dus dit typt:

[ code=delphi ]
procedure woei;
begin
//mooie layout
end;
[ /code ]
En dan de spaties na [ en voor ] weglaat, dan krijg je dus

Delphi:
1
2
3
4
procedure woei;
begin
   //mooie layout
end;

Zie ook Welkom in P&W: FAQ en Beleid *updated: 14-04*

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Delphi:
1
2
  FormatFloat('0.00',Totaal);
  FormOfferte.lblOfferteEX.Caption := FloatToStr(Totaal);


Met FormatFloat gaat het niet goed. Hij blijft 100,80 afbeelden als 100,8.
Heeft het soms met de floatToStr te maken?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12:08

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 27 mei 2003 @ 09:39:
Delphi:
1
2
  FormatFloat('0.00',Totaal);
  FormOfferte.lblOfferteEX.Caption := FloatToStr(Totaal);


Met FormatFloat gaat het niet goed. Hij blijft 100,80 afbeelden als 100,8.
Heeft het soms met de floatToStr te maken?
Ja, vandaar de CurrToStrF die ik aangaf. Dan kan je zelf opgeven hoeveel cijfers achter de decimaal er moeten komen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Zoals creepy al zegt, je hoeft enkel CurrToStrF te gebruiken. Geen RoundTo, geen FormatFloat oid. Enkel CurrToStrF.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Creepy schreef op 27 May 2003 @ 09:41:
[...]

Ja, vandaar de CurrToStrF die ik aangaf. Dan kan je zelf opgeven hoeveel cijfers achter de decimaal er moeten komen.
Het is inderdaad gelukt:

Delphi:
1
2
3
  FormOfferte.lblOfferteEX.Caption := CurrToStrF(Totaal,ffNumber,2);
  FormOfferte.lblOfferteBTW.Caption := CurrToStrF((Totaal*0.19),ffNumber,2);
  FormOfferte.lblOfferteINC.Caption := CurrToStrF(((Totaal*0.19)+Totaal),ffNumber,2);

Verwijderd

Delphi:
1
2
3
  FormOfferte.lblOfferteEX.Caption := CurrToStrF(Totaal,ffNumber,2);
  FormOfferte.lblOfferteBTW.Caption := CurrToStrF((Totaal*0.19),ffNumber,2);
  FormOfferte.lblOfferteINC.Caption := CurrToStrF(((Totaal*0.19)+Totaal),ffNumber,2);
Mooi.. dan nu een zijdelingse opmerking.. misschien is het netter je form een property 'Offerte' mee te geven oid, en deze gelijk de drie bedragen te laten invullen. Zo wordt je eigenlijke procedure leesbaarder, en voorkom je dat je bovenstaande regels op meerdere plekken in je code moet gaan zetten.


Dus bv:

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  type
    TFormOfferte = class(Tform)
    private
       FOffertebedrag: Real;
       procedure SetOffertebedrag(Value: Real);
       [..]
    public
       property OffferteBedrag: Real read FOffertebedrag write SetOffertebedrag;
       [..]
    end;

[..]

procedure TFormOfferte.SetOfferteBedrag(Value: Real);
  begin
    FOfferteBedrag := Value;
    lblOfferteEX.Caption := CurrToStrF(FOfferteBedrag,ffNumber,2);
    lblOfferteBTW.Caption := CurrToStrF((FOfferteBedrag*0.19),ffNumber,2);
    lblOfferteINC.Caption := CurrToStrF(((FOfferteBedrag*0.19)+Totaal),ffNumber,2);        
  end;


Je krijgt dan in je eigenlijke code het volgende:

Delphi:
1
   FormOfferte.OfferteBedrag:=Totaal;


En dat leest een stuk prettiger.

//edit
tip voor het aanmaken van die property: Ga in je form-declaratie staan, na het keyword 'public' en type 'property OfferteBedrag: Real;' . Druk hierna op <CRTL>-<SHIFT>-<C> (class completion). Hij zal dan automagish de setoffertebedrag procedure en het FOffertebedrag veld aanmaken. Loop met je cursor naar de functie setoffertebedrag, en druk daar op <CTRL>-<SHIFT>-<Cursor naar beneden>. Je komt dan in de code van die procedure terecht.

[ Voor 15% gewijzigd door Verwijderd op 27-05-2003 13:20 ]

Pagina: 1