Skocz do zawartości

Nakładanie jednostek na bajty i dzielenie ich...


XxMichałxX

Rekomendowane odpowiedzi

Robię takie coś co plik ini ściąga i jak już ściąga to jest pasek postępu, prędkość i takie tam, i teraz takie coś:

mam podaną liczbę bajtów, np: 63488 w zmiennej "spd". Próbowałem napisać "parser" na dwa różne sposoby i nie wyszło, nie bardzo wiem jak to zrobić a chodzi mi o to żeby taki parser zamieniał te bajty (w przypadku tej liczby) na 62KB/s a jakby bylo bardzo duzo to np na nMB/s itd.. wiecie o co biega? Parser ma zamienaic po prostu liczbe bajtów (zmienną "spd") na stringa typu "62KB/s" "2MB/s" "789B/s"

 

z gory thx

 

e: moze byc z ułamkami też np 2,8MB/s

e2: tzn. przy MB to musi byc z ulamkami ;p

Odnośnik do komentarza
Udostępnij na innych stronach

GML (GetByteSize)
if(argument0<1024)return(string(argument0)+'b')

if(argument0<1024^2&&argument0>=1024)return(string(argument0/1024)+'kb')

if(argument0<1024^3&&argument0>=1024^2)return(string(argument0/(1024^2))+'mb')

if(argument0<1024^4&&argument0>=1024^3)return(string(argument0/(1024^3))+'gb')

if(argument0>=1024^4)return(string(argument0/(1024^4))+'tb')

 

str=GetByteSize(63488)

Odnośnik do komentarza
Udostępnij na innych stronach

jeszcze przy returnie dziel przez odpowiednią potegę 1024 (w zależności od jednostki) i przybliżaj, bo np. dla 1026 ktore jest mniejsze od 1024^2 wyświetli 1026kb, a to przecież jakiś 1kb ;)

 

@Platyna: Jemu chodzi o skrypt taki jak PsichiX napisał, który 'skraca' do większej jednostki jeśli zajdzie taka potrzeba.

Odnośnik do komentarza
Udostępnij na innych stronach

PsichiX z tym skryptem szło mi 68622Tb/s :D

 

 

GML
var stat,spd,prog,sd;

stat=DM_DownloadStatus(did);

spd=DM_GetSpeed(did);

prog=DM_GetCompleted(did);

sd=get_byte_size(spd);

if stat=0

{

show_message('Nie można nawiązać połączenia!');

game_end();

exit;

}

else if stat=3

{

show_message('Pobieranie danych zakończone pomyślnie!');

room_goto_next();

}

 

draw_healthbar(0,0,400,150,prog,c_black,c_red,c_lime,0,1,0);

draw_set_font(dFont);

draw_set_color(c_white);

draw_text(100,38,"Trwa pobieranie informacji...#Prędkość "+sd+"#Pobrano "+string(prog)+"%");

to kod w draw

Odnośnik do komentarza
Udostępnij na innych stronach

Napisałem post nad twoim, że musisz dzielić przez odpowiednią potęgę 1024 :(

GML
if(argument0<1024)return(string(argument0)+'b')

if(argument0<1024^2)return(string(argument0/1024)+'kb')

if(argument0<1024^3)return(string(argument0/1024^2)+'mb')

if(argument0<1024^4)return(string(argument0/1024^3)+'gb')

return(string(argument0/1024^4)+'tb')

 

a tak w ogóle to w gmlu nie można dawać potęg w postaci ^ chyba. Jest od tego funkcja power(x,n). (nie jestem pewien bo nie korzystałem z takiej formy potęgowania)

Odnośnik do komentarza
Udostępnij na innych stronach

o wlasnie, dopisalem w sprawdzaniu, a o zwracaniu zapomnialem - dzieki :D

PS. argument0/(1024^n)

Odnośnik do komentarza
Udostępnij na innych stronach

poprawilem bo bylo nie kompletne:

 

GML (GetByteSize)
if(argument0<1024)return(string(argument0)+'b')

if(argument0<1024^2&&argument0>=1024)return(string(argument0/1024)+'kb')

if(argument0<1024^3&&argument0>=1024^2)return(string(argument0/(1024^2))+'mb')

if(argument0<1024^4&&argument0>=1024^3)return(string(argument0/(1024^3))+'gb')

if(argument0>=1024^4)return(string(argument0/(1024^4))+'tb')

 

round moze sobie potem dodac, bo generalnie ma zwracac z ulamkiem

Odnośnik do komentarza
Udostępnij na innych stronach

to dla tego iz GM ma swoje humorki, z dobrego nawyku czasem lepiej cos skonkretyzowac niz liczyc na to ze wcale nie pomiesza czegos.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...