Avatar billede js_delphi Nybegynder
03. december 2010 - 12:56 Der er 5 kommentarer og
1 løsning

Smartere maade at bruge RoundTo paa?

Hej,

Hvordan kan dette goeres smartere:

case FDecimals of
  0:
    LabelValue := RoundTo(StrToFloat(LabelText), -0);
  1:
    LabelValue := RoundTo(StrToFloat(LabelText), -1);
  2:
    LabelValue := RoundTo(StrToFloat(LabelText), -2);
  3:
    LabelValue := RoundTo(StrToFloat(LabelText), -3);

Noget i denne retning:

LabelValue := RoundTo(StrToFloat(LabelText), -FDecimals);

Hvilken selvfoelgelig ikke virker.

Tak for evt. hjaelp!
Avatar billede martinlind Nybegynder
03. december 2010 - 13:21 #1
fdecimals := fdecimals * -1;
Avatar billede hrc Mester
03. december 2010 - 13:22 #2
Hvad med dette her:

LabelValue := RoundTo(StrToFloat(LabelText), -TRoundToEXRangeExtended(FDecimals));

FDecimals burde være af den type fremfor en integer.
Avatar billede hrc Mester
03. december 2010 - 13:23 #3
Hov, Minusset skulle ind in parantesen.
Avatar billede js_delphi Nybegynder
05. december 2010 - 07:43 #4
>>fdecimals := fdecimals * -1;

Den loesning har jeg brugt, da jeg goer det samme i andre sammenhaenge.
Jeg vidste ikke, at en integer blev accepteret som TRoundToRange, men den er aabenbart god nok!

Laeg svar begge to som tak:)
Avatar billede hrc Mester
05. december 2010 - 08:57 #5
Det er almindelig typecasting. TRoundToRange er defineret som et heltalsinterval indenfor grænserne af en integer - og så kan man sagtens typecaste. Du kan evt. prøve at følge funktionen ud i VCL'et ved at klikke på RoundTo mens du holder CTRL nede. Så ser du hvordan den er defineret.

Typecasting bruger jeg også når jeg bekvemt bruger TStrings.Objects til at gemme et heltal sammen med en tekst (som regel en tekst og den tilhørende primørnøgle i en database):

AnInt := 7;
with ComboBox1 do
  if ItemIndex >= 0 then
    AnInt := integer(Items.Objects[i]);

... eller den anden vej

ComboBox.Items.AddObject('Hej verden',TObject(AnInt));

For objekter er der den lidt blødere variant med "is" og "as" så man ikke får typecastet til noget der ikke nødvendigvis er korrekt.

type
  TMyStringList = class(TStringList);

...

// Parameteren burde være aStrings: TStrings men dette her er et eksempel.
procedure DumpList(aObject: TObject);
begin
  if aObject is TMyStringList then
    with aObject as TMyStringList do
      ...
end;


Det er lidt kønnere end brutalt at typecaste til klassen (TMyStringList(aObject))
Avatar billede js_delphi Nybegynder
08. december 2010 - 06:10 #6
martinlind laeg svar!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester