ToHumanReadable

Torak 22.02.07 01:34

Konvertoi tiedoston koon helpostiluettavaan muotoon.

 Tekstiversio  Arvo: -5 (7 ääntä)  Äänestä: +  -
public static string ToHumanReadable(UInt64 size)
{
            string tmp_str = "";
            float tmp_size = size;
            UInt64 k = 0;
            string[] size_abr = { "bit", "Ki", "Mi", "Gi", "Ti" };

            while (tmp_size > 700)
            {
                tmp_size = tmp_size / 1024;
                k++;
            }

            if (tmp_size < 7)
                tmp_str = tmp_size.ToString("0.##");
            else if (tmp_size < 70)
                tmp_str = tmp_size.ToString("##.#");
            else
                tmp_str = tmp_size.ToString("#,###");

            if (k < (UInt64)size_abr.Length)
                return tmp_str + " " + size_abr[k];
            else
                return size.ToString();
}

cow 21:59 22.2.07 
Tästähän puuttuu dokumentaatio. Mitä funktiolla syötetään, missä yksiköissä ja mitä se palauttaa?
Torak 02:36 23.2.07 
Eli funktiolle syötetään tiedoston koko bitteinä ja se palauttaa merkkijono ilmentymän. Merkkijono muodostetaan mahdollisimman luettavaan muotooon ja yksikkö lisätään mukaan. Esim 783 3434 -> 78,3Ki tai 512Mi.
editoitu: 09:15 23.2.07
harja 09:15 23.2.07 
1 Byte = 8 bittiä. Ainakaan aluksi et jaa tuota lukua kahdeksalla, eli alkuperäinen luku on siis byteinä.
Miksi vertaat 700:aan, 70:een ja 7:ään? Lisäksi ilman kommentointia tästä ei kyllä ole kauheasti hyötyä.

Ztane 10:13 25.2.07 
Sitäpaitti bittejä harvemmin kyllä lasketaan Mi-etuliitteillä yms, tavuja (B) kylläkin.
feenix 22:57 21.5.07 
(Wanha, tiedän, mutta on tylsää)

Ja pitää vielä päästä nipottamaan siitä että asetetaan turha alkuarvo tmp_str:lle, plussaillaan stringejä eikä käytetä StringBuilderia tai String.Formatia, k on turhaan 64-bittinen vaikkei sen arvo tule olemaan kovin iso. Ja miksi 10000 teraa palautetaan sitten ihan vain numerona, miksei käytetä sitä suurinta mahdollista yksikköä edes?