Skip to content

Instantly share code, notes, and snippets.

@thomseddon
Last active March 8, 2023 03:39
Show Gist options
  • Save thomseddon/3511330 to your computer and use it in GitHub Desktop.
Save thomseddon/3511330 to your computer and use it in GitHub Desktop.
AngularJS byte format filter
app.filter('bytes', function() {
return function(bytes, precision) {
if (isNaN(parseFloat(bytes)) || !isFinite(bytes)) return '-';
if (typeof precision === 'undefined') precision = 1;
var units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'],
number = Math.floor(Math.log(bytes) / Math.log(1024));
return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number];
}
});
@git-demyan
Copy link

Thanks !!!

@Xsmael
Copy link

Xsmael commented Jul 5, 2017

if you wanna handle zero values as well and display them, change the 6th line like so:
number = Math.floor(Math.log(bytes) / Math.log(1024)) | 0;

@rubenqba
Copy link

Awesome!! +1

@CLOUGH
Copy link

CLOUGH commented Jul 28, 2017

You just saved me 15 mins of my life

@ruiasn
Copy link

ruiasn commented Nov 30, 2017

Very nice! Thanks !!!

@dalco
Copy link

dalco commented Nov 30, 2017

Awesome! Thanks!

@dstran
Copy link

dstran commented Apr 6, 2018

Thank you!!

@piitr64
Copy link

piitr64 commented Apr 9, 2018

Perfect. Thanks!!!
if you wanna change dot to comma as decimal separator, just simply add:
.replace('.', ',')
Here is the complete 7th line:
return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision).replace('.', ',') + ' ' + units[number];

@reznov11
Copy link

Thank you so much , very helpful 👍

@saurabhrathod35
Copy link

what if bytes size is 0.025

@devonc0
Copy link

devonc0 commented May 22, 2019

Here it is for Angular ( I just formatted this up a bit, am using Angular7) - I did not port in the Unit Tests, but didn't modify the values, so, might be able to Angularize those as well

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'byteFormatter'
})
export class ByteFormatterPipe implements PipeTransform {

  transform(bytes: string | number, precision: number): any {

    if (isNaN(parseFloat(bytes.toString())) || !isFinite(Number(bytes))) {
      return '-';
    }

    if (typeof precision === 'undefined') {
      precision = 1;
    }

    const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];
    const actualValue = Math.floor(Math.log(Number(bytes)) / Math.log(1024));

    return (Number(bytes) / Math.pow(1024, Math.floor(actualValue))).toFixed(precision) + ' ' + units[actualValue];

  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment