pfcpta
Version:
Affichage des nombres sous la forme 999 999 999.99
107 lines (93 loc) • 2.81 kB
JavaScript
/// nouvelle version avec gestion du signe car quand nombre = -0.58 l'ancienne version retournait :
/// cpta.e = 0, cpta.d = 58 cpta.c = "-0.58" --> mais cpta.e * 100 + cpta.d = 58 centimes ==> FAUX !!!!
/// on ajoute le signe maintenant : (cpta.e * 100 + cpta.d) * cpta.s = -58 centimes ==> VRAI !!!!
module.exports = (function(){
function Cpta(nombre){
if(!(this instanceof Cpta))
return(new Cpta(nombre));
nombre = nombre || 0;
var pEnt = 0,
pDec = 0,
cPta = "0.00";
if(nombre.e){
pEnt = parseInt(nombre.e, 10) || 0;
if(nombre.d){
pDec = parseInt(nombre.d, 10) || 0;
if(pDec<10){
cPta = separator(pEnt)+".0"+pDec;
}else{
pDec = parseInt(pDec.toString().substring(0, 2), 10);
cPta = separator(pEnt)+"."+pDec;
};
}else{
cPta = separator(pEnt)+".00";
};
}else
if(nombre.d){
pDec = parseInt(nombre.d, 10) || 0;
if(pDec<10){
cPta = "0.0"+pDec;
}else{
pDec = parseInt(pDec.toString().substring(0, 2), 10);
cPta = "0."+pDec;
};
}else{
var nStr = nombre.toString(),
pVir = nStr.indexOf(".");
if(pVir<0){
pEnt = parseInt(nStr, 10) || 0;
cPta = separator(pEnt)+".00";
}else{
pEnt = parseInt(nStr.substring(0, pVir), 10) || 0;
var pDecStr = nStr.substring(pVir+1).replace(/[^0-9]/g, "0");
switch(pDecStr.length){
case 0:
cPta = separator(pEnt)+".00";
break;
case 1:
pDec = parseInt(pDecStr, 10)*10 || 0;
cPta = separator(pEnt)+"."+pDec;
break;
default:
var d = pDecStr.substring(0, 2);
pDec = parseInt(d, 10);
if(pDec<10)
cPta = separator(pEnt)+".0"+pDec;
else
cPta = separator(pEnt)+"."+pDec;
break;
};
};
};
this.e = pEnt;
this.d = pDec;
this.c = cPta;
//////////////////// 2 lignes suivantes à ajouter dans pfcpta sur GitHub - Modification de ce script le 22/06/2017
this.s = sign(nombre);
if(this.s===-1 && this.e===0) this.c = "-"+cPta;
};
Cpta.prototype.toString = function(){
return(this.c);
};
Cpta.prototype.add = function(n){
var nombre = n || 0;
if(!(n instanceof Cpta))
nombre = new Cpta(n);
var somme = sign(this.e)*(Math.abs(this.e*100)+this.d) + sign(nombre.e)*(Math.abs(nombre.e*100)+nombre.d);
return(new Cpta(somme/100));
};
function separator(n){
var numberstring = "",
ent = n.toString();
for(var i=0, l=ent.length; i<l; i++){
if(i%3 == 0 && i!=0)
numberstring = " "+numberstring;
numberstring = ent[l-i-1] + numberstring;
};
return(numberstring);
};
function sign(n){
return(n<0 ? -1 : 1);
};
return(Cpta);
})();