Skocz do zawartości

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


Rekomendowane odpowiedzi

Opublikowano

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

Opublikowano

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)

Opublikowano

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.

Opublikowano

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

Opublikowano

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)

Opublikowano

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

PS. argument0/(1024^n)

Opublikowano

Potęga ma pierwszeństwo w kolejności wykonywania działań, czyż nie? :D (chyba, że GM ma pokręconą kolejność w tym wypadku). Jeszcze zapomniałem, że musisz round(x) zokrąglić, bo Ci ułamki powychodzą.

Opublikowano

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

Opublikowano

Sorry, że tak męczę ten temat, ale po co te dodatkowe warunki? Według mnie są nie potrzebne. Jak nie jest mniejszy od 1024 to idzie dalej i musi już być od niego większy bądź równy, a return kończy skrypt więc nie może sprawdzać dalszych warunków.

Opublikowano

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

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ę...