Avatar billede stalle Nybegynder
26. august 2002 - 15:41 Der er 8 kommentarer og
1 løsning

Dividere hvor resultatet er med 2 decimaler

Hvorfor giver følgende kode, denne fejl:
Incompatible types: 'Integer' and 'Extended'

Fejlen kommer ved linien der hedder:
size2 := (size / 1024);

Resultatet skulle gerne komme ud med 2 decimaler.


procedure TForm1.Openlog(Sender: TObject);
var
  f: file;
  size, size2, dato, foundat, foundatend : Longint;
  i, i1, iend, iend1 : integer;
  StartTid, StartTid1, size1 : String;
begin
ListBox1.Clear;

//Fil Størrelse
  AssignFile(f, FileListBox1.FileName);
  Reset(f);
  size := FileSize(f);
  if size > 1024 then
    begin
      size2 := (size / 1024);
      size1 := IntToStr(size) + ' MB'
    end
    else
      size1 := IntToStr(size) + ' bytes';

  StatusBar1.Panels[1].Text := size1;
Avatar billede borrisholt Novice
26. august 2002 - 15:44 #1
Brug FormatFloat ...

Jens B
Avatar billede stalle Nybegynder
26. august 2002 - 15:58 #2
Det er ikke så meget det med at få de to decimaler - det er mere det, at size2 := (size / 1024); ikke virker.
For at få det til at virke, bliver jeg nød til at gøre følgende:
size2 := (size div 1024);
og det gør at jeg ikke kan lave resultatet med to decimaler.
Avatar billede borrisholt Novice
26. august 2002 - 16:01 #3
Nej det er fordi Size er en Integer den skal du erklære som en Extended


Jens B
Avatar billede hermandsen Juniormester
26. august 2002 - 16:36 #4
Brug denne funktion:

uses
  Math;

function Prefix(const Size: Int64; Decimals: Byte = 2): String;
var                 
  Counter: Byte;
begin
  Counter := 0;
  while Size/Power(1024, Counter) > 1000.0 do
    Inc(Counter);

  case Counter of
    0: Result := 'byte';
    1: Result := 'KB';
    2: Result := 'MB';
    3: Result := 'GB';
    4: Result := 'TB';
    5: Result := 'PB';
    6: Result := 'EB';
    else Result := 'Error';
  end;

  Result := Format('%.'+IntToStr(Decimals)+'n %s', [Size/Power(1024, Counter), Result]);
end;
Avatar billede loke-liscom Nybegynder
27. august 2002 - 11:44 #5
//Det er ikke så meget det med at få de to decimaler - det er mere det, at
//size2 := (size / 1024); ikke virker.
//For at få det til at virke, bliver jeg nød til at gøre følgende:
//size2 := (size div 1024);
//og det gør at jeg ikke kan lave resultatet med to decimaler.
En integer kan kun indeholde hele tal såsom 1,100,333,65535 eller lign. i det du vil dividere vil det jo ofte give et "skævt" tal. En variabel af typen real, float, extended eller lign. kan indeholde kommatal. Når du så vil have det udskrævet i din statusbar findes der nogle funktioner til at lave det til string men x antal decimaler. deriblandt FloatToStr og Format.
/Klaus
btw. når du bruger "div" til at dividere med gør den det at den afrunder taldet til 0 decimaler så det kan være i en integer.
Avatar billede hermandsen Juniormester
27. august 2002 - 13:43 #6
>>loke-liscom
Den afrunder ikke til 0, den dividere o fjerner alt efter kommaet...

Det vil sige:

6 div 3 = 2
7 div 3 = 2
8 div 3 = 2
9 div 3 = 3

osv...
Avatar billede loke-liscom Nybegynder
28. august 2002 - 11:14 #7
okay okay... nu sad jeg ikke foran delphi da jeg skrev det så jeg testede ikke lige om div afrundede eller fjernede.. sorry....
Avatar billede hermandsen Juniormester
28. august 2002 - 12:35 #8
>>loke-liscom
Det behøver man ikke at ha' Delphi kørende for... Man ved bare hvordan den virker! ;)
Avatar billede loke-liscom Nybegynder
28. august 2002 - 13:32 #9
Okay hermandsen så kalder vi det en fortalelse......
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