Created
December 23, 2012 23:12
-
-
Save twolfson/4366627 to your computer and use it in GitHub Desktop.
Convert numbers to their short yet semantic equivalent 100 -> 100, 1200 -> 1.2k, 2589000 -> 2.5m
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Modification of https://github.com/milanvrekic/JS-humanize/blob/master/humanize.js | |
/*! | |
intword | |
Converts a large integer to a friendly text representation. Works best for numbers over 1 million. | |
100 -> 100 | |
1200 -> 1.2k | |
2589000 -> 2.5m | |
*/ | |
function sliceToFirstDecimal(number) { | |
var numStr = number + ''; | |
// If there is no decimal, add one | |
if (numStr.indexOf('.') === -1) { | |
numStr += '.'; | |
} | |
// Pad the number | |
while (numStr.length < 3) { | |
numStr = numStr + '0'; | |
} | |
// Slice the excess and return | |
var retVal = numStr.slice(0, 3); | |
return retVal; | |
} | |
module.exports = function (number) { | |
number = parseInt(number, 10); | |
if( number < 1e3 ) { | |
return number; | |
} else if( number < 1e6 ) { | |
return sliceToFirstDecimal(number / 1e3) + "k"; | |
} else if( number < 1e9 ) { | |
return sliceToFirstDecimal(number / 1e6) + "m"; | |
} else if( number < 1e12 ) { //senseless on a 32 bit system probably. | |
return sliceToFirstDecimal(number / 1e9) + "b"; | |
} else if( number < 1e15 ) { | |
return sliceToFirstDecimal(number / 1e12) + "t"; | |
} | |
return "" + number; // too big. | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment