Reputation: 75945
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
Reputation: 7041
There's now a couple of pretty nice Humanize libraries for JS, I'd recommend you have a look at:
There's also https://github.com/taijinlee/humanize if you'd like to take a look.
Upvotes: 0
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