Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // for Typescript 1.7+
- const si = false;
- const byteUnitSize = si ? 1000 : 1024;
- const decimalPoint = ',';
- const thousandsSeperator = '.';
- const filesizeRegex = /([\d\.,]+)\s*([KMGTPE]?i?B(?:ytes)?)\b/i;
- const typeFactor = {
- 'B': byteUnitSize ** 0
- , 'KB': byteUnitSize ** 1
- , 'MB': byteUnitSize ** 2
- , 'GB': byteUnitSize ** 3
- , 'TB': byteUnitSize ** 4
- , 'PB': byteUnitSize ** 5
- , 'EB': byteUnitSize ** 6
- };
- const byteUnits = si ? 'kMGTPE' : 'KMGTPE';
- export class ByteConverter
- {
- /**
- * Returns the size in bytes represented by the given string.
- *
- * @param {!string} str
- * The size as a string
- * @return {number} The size in bytes
- */
- public static fromString(str: string): number
- {
- const match = str.match(filesizeRegex);
- if (!match)
- {
- return null;
- }
- let size = parseFloat(match[1].replace(/,/g, ''));
- const sizeType = match[2].replace(/i|ytes/g, '').toUpperCase();
- size *= typeFactor[sizeType];
- // always round to the next higher integer
- size = Math.ceil(size);
- return size;
- }
- /**
- * Returns the given size in bytes as a readable string.
- *
- * @param {number} bytes
- * The size in bytes
- * @param {number=0} padp
- * How many decimal places should be displayed (padp = position after decimal point)
- * @return {string} The size as a readable string
- */
- public static toString(bytes: number, padp = 0): string
- {
- let exp = 0;
- let type = 'B';
- const sign = bytes >= 0 ? '' : '-';
- bytes = Math.abs(bytes);
- if (bytes >= byteUnitSize)
- {
- exp = Math.min(Math.floor(Math.log(bytes) / Math.log(byteUnitSize)), byteUnits.length);
- type = byteUnits.charAt(exp-1) + (si ? '' : 'i') + 'B';
- }
- let num = bytes / (byteUnitSize ** exp);
- if (exp > 0)
- {
- const roundFactor = (10 ** padp);
- num = Math.round(num * roundFactor) / roundFactor;
- }
- // transform the decimal point into a comma
- let numStr = num.toString(10).replace('.', decimalPoint);
- // insert a thousand seperator if needed
- if (num >= 1000)
- {
- const parts = numStr.split(decimalPoint);
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeperator);
- numStr = parts.join(decimalPoint);
- }
- return sign + numStr + ' ' + type;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment