toFixed qui nous permet de limiter le nombre de décimales
Number.toLocaleString qui permet entre autre d 'afficher la virgule ou le point pour le séparateur de décimales
Bien même ces méthodes ca ne répond pas a notre besoin qui est de mettre les nombre au format monétaire voir (symbole)n nnn nnn ,nnnnnn(symbole)
il existe bien des plugins des librairie Javascript qui fournissent ces fonctionnalités . Mais je trouve que cette tache est bien plus simple pour inclure une librairie
Pour ca je propose cette fonction:
function formatMoney(num , localize,fixedDecimalLength){ num=num+""; var str=num; var reg=new RegExp(/(\D*)(\d*(?:[\.|,]\d*)*)(\D*)/g) if(reg.test(num)){ var pref=RegExp.$1; var suf=RegExp.$3; var part=RegExp.$2; if(fixedDecimalLength/1)part=(part/1).toFixed(fixedDecimalLength/1); if(localize)part=(part/1).toLocaleString(); str= pref +part.match(/(\d{1,3}(?:[\.|,]\d*)?)(?=(\d{3}(?:[\.|,]\d*)?)*$)/g ).join(' ')+suf ; }; return str; }Voici quelques tests
formatMoney(5879); //5 879 formatMoney(5879.158); //5 879.158 formatMoney(5948794875358.158); //5 948 794 875 358.158 formatMoney(5948794875358.158,true, 2) //5 948 794 875 358,16 formatMoney("5948794875358.158") //5 948 794 875 358.158 formatMoney("5948794875358.158€") //5 948 794 875 358.158€ formatMoney("$5948794875358.158") //$5 948 794 875 358.158 formatMoney("USD5948794875358.158") //USD5 948 794 875 358.158 formatMoney(-5948794875358.158) //-5 948 794 875 358.158Cette méthodes est basée sur les expression régulière pour délimiter les séparation elle tient compte du fait qu on puisse ajouter des symboles monétaire avant et prés de l'usage de la virgule ou du point pour les décimale et bien sure de arrondi et réduction des décimales
merci pour cette solution
RépondreSupprimer