formattage financier

Le
kurtz le pirate
bonjour,

bon j'ai besoin de formater des nombres avec séparateurs de milliers et
une virgule. j'ai donc écrit cette fonction :

sub money {
my $thisNum=shift; # <- float number here
my ($intPart,$decPart)=split /./, $thisNum;
if (!defined($decPart)) { $decPart="00"; }
my $nbDigit = length($intPart);
my $nbLoop = $nbDigit/3;
my $money=$intPart;
for (my $index=1;$index<$nbLoop;$index++) {
$money=substr($money, 0, $nbDigit-(3*$index))." ".substr($money,
$nbDigit-(3*$index));
}
return "$money,$decPart";
}

mais ça existe peut être déjà dans un bibliothèque de perl non ?


--
klp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Klaus
Le #153230
On Nov 3, 12:17 pm, kurtz le pirate
bonjour,

bon j'ai besoin de formater des nombres avec séparateurs de milliers et
une virgule. j'ai donc écrit cette fonction :

sub money {
my $thisNum=shift; # <- float number here
my ($intPart,$decPart)=split /./, $thisNum;
if (!defined($decPart)) { $decPart="00"; }
my $nbDigit = length($intPart);
my $nbLoop = $nbDigit/3;
my $money=$intPart;
for (my $index=1;$index<$nbLoop;$index++) {
$money=substr($money, 0, $nbDigit-(3*$index))." ".substr($money,
$nbDigit-(3*$index));
}
return "$money,$decPart";
}

mais... ça existe peut être déjà dans un bibliothèque de perl n on ?


La solution se trouve dans perlfaq5 (avec une petite modification pour
les français dans la sub commify() --> remplacer la virgule dans .../
$1,$2/; par une espace .../$1 $2/;
http://perl.enstimac.fr/DocFr/perlfaq5.html#comment%20afficher%20mes%20nomb res%20avec%20des%20virgules%20pour%20d%E9limiter%20les%20milliers

========================= =================
"Comment afficher mes nombres avec des virgules pour délimiter les
milliers ?"
(contribution de brian d foy et de Benjamin Goldberg)

Vous pouvez utiliser le module la page de manuel Number::Format pour
délimiter vos nombres. Ce module tient compte des informations
fournies par les 'locale' pour ceux qui voudraient utiliser un espace
comme délimiteur (ou n'importe quel autre caractère).

La routine suivante ajoute des virgules dans un nombre :

sub commify {
local $_ = shift;
1 while s/^([-+]?d+)(d{3})/$1,$2/;
return $_;
}

Cette expression rationnelle de Benjamin Goldberg ajoute des virgules
aux nombres :

s/(^[-+]?d+?(?=(?>(?:d{3})+)(?!d))|Gd{3}(?=d))/$1,/g;

Elle est plus lisible avec des commentaires :

s/(
^[-+]? # début d'un nombre.
d+? # les premiers chiffres avant une virgule
(?= # suivis par,
# (sans faire partie de ce qui est reconnu)
(?>(?:d{3})+) # un ou plusieurs groupes de 3 chiffres
(?!d) # un multiple *exact* et non x * 3 + 1 ou
autre.
)
| # ou :
Gd{3} # le dernier groupe avec 3 chiffres
(?=d) # mais sans aucun chiffre ensuite.
)/$1,/xg;
========================= =================

--
Klaus

Publicité
Poster une réponse
Anonyme