Created
February 25, 2020 10:13
-
-
Save raulcontrerasrubio/15d962bf02dbbb3da2c0e8495e87e697 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
/* | |
* https://locutus.io/php/strings/number_format/ | |
* _number_format(number:number, decimals:number, decPoint:string, thousandsSep:string):string | |
* Returns a string which represents the number formatted | |
*/ | |
const _number_format = (number, decimals, decPoint, thousandsSep) => { | |
// eslint-disable-line camelcase | |
number = (number + '').replace(/[^0-9+\-Ee.]/g, ''); | |
var n = !isFinite(+number) ? 0 : +number; | |
var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals); | |
var sep = typeof thousandsSep === 'undefined' ? ',' : thousandsSep; | |
var dec = typeof decPoint === 'undefined' ? '.' : decPoint; | |
var s = ''; | |
var toFixedFix = function(n, prec) { | |
if (('' + n).indexOf('e') === -1) { | |
return +(Math.round(n + 'e+' + prec) + 'e-' + prec); | |
} else { | |
var arr = ('' + n).split('e'); | |
var sig = ''; | |
if (+arr[1] + prec > 0) { | |
sig = '+'; | |
} | |
return (+(Math.round(+arr[0] + 'e' + sig + (+arr[1] + prec)) + 'e-' + prec)).toFixed(prec); | |
} | |
}; | |
// @todo: for IE parseFloat(0.55).toFixed(0) = 0; | |
s = (prec ? toFixedFix(n, prec).toString() : '' + Math.round(n)).split('.'); | |
if (s[0].length > 3) { | |
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep); | |
} | |
if ((s[1] || '').length < prec) { | |
s[1] = s[1] || ''; | |
s[1] += new Array(prec - s[1].length + 1).join('0'); | |
} | |
return s.join(dec); | |
}; | |
const defaultLocaleOptions = { | |
decimals: 2, | |
decimalSep: ',', | |
thousandsSep: '.', | |
currencySymbol: '€', | |
}; | |
/* | |
* toCurrency(num:number, localeOptions):string | |
* Returns a currency formatted number | |
*/ | |
const toCurrency = (num, localeOptions = defaultLocaleOptions) => { | |
const {decimals, decimalSep, thousandsSep, currencySymbol} = localeOptions; | |
return `${_number_format(num, decimals, decimalSep, thousandsSep)} ${currencySymbol}`; | |
}; | |
export default toCurrency; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment