Jak przedstawić wynik w KB

0

Jak przekształcić wynik zliczania "bajtów w listboxie" dla KB.

Próbowałem już (FloatToStr(sum)) div 1024; ale to są nie kompatybilne typy.
Jak to poprawnie sformatować ?

var i:integer;
    str:String;
    value:real;
    code:integer;
    sum:real;
begin
  i :=0;
  sum:=0.0;
  while (i<ListBox1.Items.Count) do
    begin
     str:=ListBox1.Items.Strings[i];
     Val(str,value,code);
     sum:=sum+value;
     i:=i+1;
    end;
  Label1.caption := FloatToStr(sum);
 // wynik podawany jest w bajtach, a ja chce w KB, czyli div 1024, ale jak ???
end;
0

No to może??:

 Label1.caption := FloatToStr(sum / 1024);
0

A może:

  Label1.caption := FloatToStr(sum div 1024);

[Dopisane]
arhi byłeś szybszy :P

0
arhi napisał(a)

No to może??:

 Label1.caption := FloatToStr(sum / 1024); lub  Label1.caption := FloatToStr(sum div 1024);

Nie idzie... :-/ (wynik wychodzi z jakimś przecinkiem: 32525,4365465)

0

no to zamiast floattostr daj floattostrf to bedziesz mógł określić ilość miejsc po przecinku

0

Jest problem. Chcesz przedstawić wynik w KB ale nie ma czegoś takiego.
Zdecyduj się:
kB to 1000 bajtów
KiB to 1024 bajty

0
Marooned napisał(a)

Jest problem. Chcesz przedstawić wynik w KB ale nie ma czegoś takiego.
Zdecyduj się:
kB to 1000 bajtów
KiB to 1024 bajty

Jasne że w KiB (1024)

no to zamiast floattostr daj floattostrf to bedziesz mógł określić ilość miejsc po przecinku

arti możesz podać przykład. nie wiem jak to wykorzystać :)

0
label1.Caption:=floattostrf(sum / 1024,ffNumber,1,2);

//dopisane:

Adamo napisał:

kB = 1024 bajty, KiB to są kB tylko niektórzy se tak oznaczają, skąd trzasłeś nowinę że kB to 1000 bajtów ?

Właśnie też się tak zastanawiam skąd on to wziął. :)

0
arhi napisał(a)
label1.Caption:=floattostrf(sum / 1024,ffNumber,1,2);

Super !!!. Wielkie dzięki arhi !

0
Marooned napisał(a)

Jest problem. Chcesz przedstawić wynik w KB ale nie ma czegoś takiego.
Zdecyduj się:
kB to 1000 bajtów
KiB to 1024 bajty

kB = 1024 bajty, KiB to są kB tylko niektórzy se tak oznaczają, skąd trzasłeś nowinę że kB to 1000 bajtów ? ale wszyscy wiedzą o co chodzi w KB bo do niczego innego jak do kB nie można tego przypisać

http://pl.wikipedia.org/wiki/Kilobajt

W celu odróżnienia przedrostków o mnożniku 1000 od przedrostków o mnożniku 1024 już w styczniu 1997 r. pojawiła się propozycja opracowana przez IEC dodawania litery "i".

KiB - kibibajt - żeby odróżnić od kilobajt kolidującego z układem SI przez co niektórzy mogliby myśleć że kB to 1000 bajtów

Ta propozycja rozwiązania problemu niejednoznaczności przedrostków nie przyjęła się jednak

0

Właśnie też się tak zastanawiam skąd on to wziął.

przykład 1
przykład 2
i wieeeele innych
ale fakt - na niektórych stronach jest adnotacja, że system KiB się nie przyjął - co nie zmienia faktu, że nie ma czegoś takiego jak KB :) Więc dlaczego nie pisać zgodnie z panującymi zasadami? :)

0
Marooned napisał(a)

Właśnie też się tak zastanawiam skąd on to wziął.

przykład 1

Hier ist der neue Standard:

tyle że właśnie ten neue standard się nie przyjął, jakby się przyjął to by tak było, a na wielu stronach można znaleźć że kilobajt się oznacza "KB", prosze - niech nikt mi tu z tymi jednostkami nie pieprzy, już chyba rok temu miałem załamanie psychiczne z B i b ale okazało się że m.in. w total commanderze b=B

a w przykładzie drugim Kawecki se pisze w nowych standardach które się nie przyjęły - widocznie nikt nie chciał mu o tym powiedzieć po tym jak zobaczyli jak się rozpisał :)

no znalazłem ten głupi kawał: Czym się różni student pierwszego roku informatyki od studenta piątego roku informatyki?

  • Ten na pierwszym myśli, że 1 kilobajt to 1000 bajtów. Ten na piątym roku twierdzi, że 1 km to 1024 metry.

sorry, nie mogłem tego zostawić bez komentarza bo znowu bym nie mógł zasnąć myśląc: "WTF ?" :)

//spox - ja też nie używam tego KiB ale nie piszcie KB tylko kB :P - M

// Prawdę mówiąc "nowe" jednostki spotkałem tylko w lynxie i linksie - Q

// ej - gdzie mnie tu w poście grzebiecie ? [diabel]

0

Chyba za wcześnie się ucieszyłem... :D

arhi napisał:

label1.Caption:=floattostrf(sum / 1024,ffNumber,1,2);

Co prawda działa, ale w niektórych przypadkach wynik jest następujący: 3,5E04
Wkradają się jakieś litery !!. Pamiętam też coś podobnego było w Pascalu w szkole tyle że to było: 34,45+E03

Nie wiem jak to obejść, ale zrobiłem innym sposobem.
Niestety wydłuży to nieznacznie obliczanie... :-|

function ObliczMB : string;
var
a, code : integer;
str : String;
value, sum : real;
begin
  a :=0;
  sum:=0.0;
  while (a<Form1.ListBoxBajty.Items.Count) do
    begin
     str:=Form1.ListBoxBajty.Items.Strings[a];
     Val(str,value,code);
     sum:=sum+value;
     a:=a+1;
    end;

    result := floattostr(sum);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Temp, ANumber : string;
 I, Actual: integer;
begin
Temp := ObliczMB;

for i:=1 to Length(Temp) do
    begin
      ANumber := ANumber + Temp[i];
      Actual := StrToInt(ANumber);
    end;
   Label1.Caption := ((IntToStr((Actual) div 1024)) + ' kB,  ' + (IntToStr((Actual) div 1024000)) + ' MB');
end;
0

Heh, to nie jest wkradanie się liter, tylko postać wykładnicza :]. I jest to to samo, co w Pascalu, tylko bez tego plusa. Nie jest to błąd ani dziki zapis, którego się nie da rozszyfrować. Po prostu powiedzmy 1,43205E05 oznacza nic innego jak 1,43205 * 10^5.

0
Adam.Pilorz napisał(a)

Nie jest to błąd ani dziki zapis, którego się nie da rozszyfrować. Po prostu powiedzmy 1,43205E05 oznacza nic innego jak 1,43205 * 10^5.

No dobrze, ale przecież nie można sobie pozwolić na taki zapis w programie. :-|
Więc jak to zmienić, bez przerabianie dodatkowych funkcji "kod powyżej" ???

0
uses math;
const
  m = 1024;
function Przelicz( var x: integer; krotnosc:integer ):string;
var t:integer;
begin
  t:= x div (Round(Power(m, krotnosc)));
  x:= x -  t *  (Round(Power(m, krotnosc))) ; // w x mamy resztę pozostałą po odjęciu pełnych jednostek
  result:=IntToStr( t );
end;

function PrzeliczNaGiB( var x: integer ):string;
begin
  result:=Przelicz( x, 3);
end;
function PrzeliczNaMiB( var x: integer ):string;
begin
  result:=Przelicz( x, 2);
end;
function PrzeliczNaKiB( var x: integer ):string;
begin
  result:=Przelicz( x, 1);
end;
0

czemu zmienna sum jest typu real? Przeciez bity i bajty to liczby calkowite :>
u mnie:

Label1.caption := FloatToStrf(sum/1024,fffixed,100,2);

nie wyswietla w postaci wykladniczej :></delphi>

0

Ale moment... Masz ilość bajtów i chcesz z tego wyciągnąć kB i MB? No to nie widzę problemu:
MB - ilość megabajtów
kB - ilość kilobajtów
B - ilość bajtów

MB:=B div (1024*1024);
kB:=(B div 1024) mod 1024;
B:=B mod 1024;

I teraz to przedstawiasz na przykład tak:
Tekst:='Rozmiar wszystkich plików: '+IntToStr(MB)+' MB '+IntToStr(kB)+' kb '+IntToStr(B)+' B.';
No i po problemie...
//Dopisane:
Qyon - byłeś szybszy :]
Passage - ale czy to nie nazbyt kombinowanie?

0

Ja wstawiłem coś takiego tylko dla MB

LabSize1.Caption := Format('%.2f z %.2f MB', [Gauge1.Progress/1048576,Gauge1.MaxValue /1048576]);

i liczy :). Gauge1.Progress wielkości w bajtach.

0
Passage napisał(a)

u mnie:

Label1.caption := FloatToStrf(sum/1024,fffixed,100,2);

nie wyswietla w postaci wykladniczej :></delphi>

Nareszcie, o to mi chodziło !! ;). Byłeś blisko arhi.
Dzięki Passage. Działa jak trzeba bez tego E04 itp... [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1