Splits numbers with commas to make them more readable. Thanks to @maettig for being awesome
-
-
Save williammalo/2363615 to your computer and use it in GitHub Desktop.
| function(n){ | |
| return //return | |
| (""+n) //the number converted to a sting | |
| .replace(/\B(?=(...)+$)/g,",") //with a comma inserted every 3 characters | |
| } |
| //simple version: | |
| function(n){return(""+n).replace(/\B(?=(...)+$)/g,",")} | |
| //Does not fuck decimals up version: | |
| function f(a,b,c){return b||(c?a+',':a+'').replace(/(\.\d*)|\d(?=(\d{3})+\b)/g,f)} |
| { | |
| "name": "numSplit", | |
| "description": "Splits numbers with commas to make them more readable.", | |
| "keywords": [ | |
| "number", | |
| "comma", | |
| "math", | |
| "format" | |
| ] | |
| } |
| <script> | |
| numSplit = function(n){return(""+n).replace(/\B(?=(...)+$)/g,",")} | |
| document.write(numSplit(3255325235523632)) | |
| </script> |
@maettig
Well, it doesn't really make it work, it adds commas to decimal places... I don't think thats how english works. Then again, I might be wrong about that.
try numSplit(125252.2421415) in Firefox => "1252,52.242,141,5"
Correct would be 125,252.2421415
You are right. I missed that in my tests. What about this?
function(a){return(''+a).replace(/\.\d*|\B(?=(\d{3})+\b)/g,function(a){return a||','})}Merging the two functions is possible but makes the code very ugly. Edit: OK, here it is. This is smaller and more reliable because it does not insert a comma in "U100".
function f(a,b,c){return b?b:c?a+',':(''+a).replace(/(\.\d*)|\d(?=(\d{3})+\b)/g,f)}@maettig
Sweet!
1 byte smaller:
function f(a,b,c){return b||(c?a+',':a+'').replace(/(\.\d*)|\d(?=(\d{3})+\b)/g,f)}Yep, that's cool. This will start recursive calls of replace but it will stop immediately because a contains single digits only. When you do a benchmark you will see it's slower but this can be ignored because of the fast regular expression engines nowadays.
I like it!
What about saving 2 bytes with split?
function(n){return''+(''+n).split(/\B(?=(?:...)+$)/)}123456789..toLocaleString() seems doing the trick.
Making
numSplit(1234.5678)work is pointless?