Skip to content

Instantly share code, notes, and snippets.

@raulcontrerasrubio
Created February 25, 2020 10:13
Show Gist options
  • Save raulcontrerasrubio/15d962bf02dbbb3da2c0e8495e87e697 to your computer and use it in GitHub Desktop.
Save raulcontrerasrubio/15d962bf02dbbb3da2c0e8495e87e697 to your computer and use it in GitHub Desktop.
/*
* 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