Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

formattage financier

1 réponse
Avatar
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

1 réponse

Avatar
Klaus
On Nov 3, 12:17 pm, kurtz le pirate wrote:
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