[ASP] Formatage de montants |
Se détacher des paramètres régionaux |
|
 |
Les fonctions mathématiques ASP (FormatNumber, Round, ...) se basent sur les paramètres régionaux du serveur pour savoir quel séparateur de décimales et quel séparateur de milliers utiliser.
Cela devient vite un casse-tête d'afficher des montants dans un format précis, surtout lorsque les paramètres du serveur sont modifiés sans prévenir.
|
Cette petite fonction permet de se détacher de ces paramètres régionaux.
 Elle vient en complément des masques de saisie de iubito pour afficher correctement les montants dans des listes par exemple.
 Elle ne renvoie qu'un seul format d'affichage,
mais vous pouvez très facilement l'adapter à vos besoins :
# ###,##0
- iMontant : Montant non formaté
- iNbDec : nbre de décimales à afficher
- strAffNbDec : 'Y' pour compléter les décimales avec des 0 non significatifs

| format_montant.asp |  |  | |
| <% Function FormatMontant(iMontant, iNbDec, strAffNbDec) ' Déclaration des variables locales dim strMt dim strNewMontant dim iPosDecimale dim i dim j dim strChaine
strChaine = "" strNewMontant = "" strMt = iMontant
' Récupération de la position de la décimale dans le montant en entrée ' On cherche d'abord la ',' et ensuite le '.' iPosDecimale = instr(strMt, ",") if iPosDecimale = 0 THEN iPosDecimale = instr(strMt, ".") end if ' Récupération du nombre de caractères du montant avant formatage i = Len(strMt) j = 0
' On lit le montant caractère par caractère en partant de la fin ' Jusqu'à la position du séparateur de décimale, on ne fait rien ' A partir de ce point on rajoute les séparateurs de milliers... while i>0 ' Récupération du i-éme caractère strChaine = Mid(strMt, i, 1) if strChaine = "." THEN ' On transforme le séparateur de décimale strChaine = "," end if
if i < iPosDecimale OR iPosDecimale = 0 THEN ' On est en train de lire les chiffres de la partie entière ' On ajoute un séparateur " " tous les 3 caractères j=j+1 if j > 3 THEN strNewMontant = " " & strNewMontant j = 1 end if end if
' Reconstitution du montant strNewMontant = strChaine & strNewMontant i=i-1 wend
if iNbDec <> "" AND iNbDec <> "0" THEN ' Un nombre de décimales précis à été demandé ' Récupération du nbre de décimales contenu dans le montant en entrée if iPosDecimale <> 0 THEN i = Len(strMt) - iPosDecimale else i = 0 end if if CInt(i) > CInt(iNbDec) THEN ' Il y a plus de décimales en entrée que le nombre demandé ' Récupération de la partie décimale dans le montant en entrée iDec = Right(strMt, i)
' Le but est le suivant : 16,1466 doit devenir 16,15 par exemple ' 1- Récupération de 1466 ' 2- On sait qu'il y a 4 décimales, on divise par 10000 --> 0,1466 ' 3- On peut appliquer la fonction ASP Round sur 0,1466 sans ' soucis de paramétrage régionaux ' Round('0,1466', 2) = 0.15 ou 0,15 ou autre ' 4- On récupére la partie décimale : 15 ' 5- On concatène avec le nouveau Montant
' 1 - Constitution du diviseur j = 1 while j <= i ' 2 - iDec = CDbl(iDec) / 10 j = j+1 wend ' 3 - iDec = Round(iDec, iNbDec)
' 4 - iPosDecimale = instr(iDec, ",") if iPosDecimale = 0 THEN iPosDecimale = instr(iDec, ".") end if iDec = Mid(iDec, iPosDecimale+1, Len(iDec)-iPosDecimale)
' 5 - iPosDecimale = instr(strNewMontant, ",") strNewMontant = Left(strNewMontant, iPosDecimale) & iDec end if end if if UCase(strAffNbDec) = "Y" THEN ' Il faut que le nombre de décimales affichées corresponde au nombre de décimales ' demandées. S'il en manque, on complète par des 0 ' Récupération de la position du séparateur de décimales dans le montant formaté iPosDecimale = instr(strNewMontant, ",") ' Ajout des 0 non significatifs if iPosDecimale = 0 THEN strNewMontant = strNewMontant & "," iDec = "" else iDec = Right(strNewMontant, Len(strNewMontant) - iPosDecimale) end if if len(iDec) < CInt(iNbDec) THEN i = len(iDec) while CInt(i) < CInt(iNbDec) strNewMontant = strNewMontant & "0" i = i+1 wend end if end if FormatMontant = strNewMontant End Function %> |
jollt le
14/11/2003 (23 705 hits) |
|
|