Tarang
Tarang

Reputation: 75945

What is the most elegant way in javascript to convert bytes into a readable format

I found a very elegant 'humanize' converter for Java on stackoverflow which didn't use any loops.

Is it possible to do the same with javascript? (e.g 1024 bytes => 1 kb)?

As simple as it sounds I have done quite a search for it

Incase you're wondering : Java Version

Upvotes: 4

Views: 627

Answers (2)

wizztjh
wizztjh

Reputation: 7041

There's now a couple of pretty nice Humanize libraries for JS, I'd recommend you have a look at:

HubSpot/Humanize Plus

There's also https://github.com/taijinlee/humanize if you'd like to take a look.

Upvotes: 0

HBP
HBP

Reputation: 16033

function byteCount (bytes, unit) {
  if (bytes < (unit = unit || 1000)) 
    return bytes + " B";
  var exp = Math.floor (Math.log (bytes) / Math.log (unit));
  var pre = ' ' +(unit === 1000 ? "kMGTPE" : "KMGTPE").charAt (exp - 1) + (unit === 1000 ? "" : "i") + 'B';
    return (bytes / Math.pow (unit, exp)).toFixed (1) + pre;
}

[ 0, 27, 999, 1000, 1023, 1024, 1728, 110592, 7077888, 
  452984832, 28991029248, 1855425871872, 9223372036854775807].forEach (
    function (v) { console.log (v, byteCount (v), byteCount (v, 1024)); });

/* Displays :    
0 "0 B" "0 B"
27 "27 B" "27 B"
999 "999 B" "999 B"
1000 "1.0 kB" "1000 B"
1023 "1.0 kB" "1023 B"
1024 "1.0 kB" "1.0 KiB"
1728 "1.7 kB" "1.7 KiB"
110592 "110.6 kB" "108.0 KiB"
7077888 "7.1 MB" "6.8 MiB"
452984832 "453.0 MB" "432.0 MiB"
28991029248 "29.0 GB" "27.0 GiB"
1855425871872 "1.9 TB" "1.7 TiB"
9223372036854776000 "9.2 EB" "8.0 EiB" */

Note the Java version results table has an error displaying 7.1 KB instead of 7.1 MB

Upvotes: 5

Related Questions