Designed by NoKi !
75 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter






   

[ASP] Formatage de montants

Se détacher des paramètres régionaux





jollt
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
%>

Pour pouvoir écrire dans ce forum, identifiez-vous !

  v1.3p © ASP-PHP.net 2002  

jollt le 14/11/2003 (20 707 hits)
Didier Téléchargez gratuitement et légalement des logiciels Microsoft ! Si, si ;)
  • Visual Studio 2010
  • Office 2010
  • Expression Studio 3
  • SQL Server 2008
  • et d'autres...
Au fil des news  
Magazines - Le N°128 de Programmez est disponible
Magazines - Le N°127 de Programmez est disponible
Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 6
Pour continuer dans le même style, je vous propose une suite au précédent article. Rechercher tous ...
Adobe - Adobe Photoshop.com Mobile pour iPhone 1.1
JavaScript - Ajouter une page dans vos favorites
Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 5 -
Je vous propose cette fois deux astuces. Comment exporter une feuille de style avec l'aide de ...
SharePoint Personalization Site Links - Les liens personnalisés des MySite SharePoint
Nous avons vu dans les articles précédents comment agrémenter les pages de recherche afin de ...
Magazines - Le n°126 de Programmez est disponible
Outils - Traducteur en ligne automatique pour site web
Adobe - Adobe Photoshop.com Mobile pour Iphone
Magazines - Le n°125 de Programmez est disponible
Adobe - Adobe AIR 2 et Flash Player 10.1version bêta
Les conférences autour des technologies Microsoft - Liste non exhaustive des grands évènements
Nous allons essayer de regrouper un grand nombre des évènements autour des technologies Microsoft ...
Magazines - Le n°124 de Programmez est disponible
PHP - Forum PHP 2009
Composants - eFace - XAML en Java
WPF - Désactiver le bouton de réduction d'une fenêtre
Magazines - Le n°123 de Programmez est disponible
Magazines - Le n°122 de Programmez est disponible
Auditer une ferme SharePoint - Assurer le bon fonctionnement de SharePoint
Dans le cadre de la bonne gestion de son environnement SharePoint, il est utile de faire un ...
SQL Server 2008 Report Builder 2.0 - Installation et utilisation de Report Builder 2.0
Dans le cadre de la création de rapports pour SQL Server Reporting Services 2008, un outil est ...
Magazines - Le HS N° 1 de Web Design est disponible
Adobe - Adobe propose en Open Source les frameworks.....
Outils - EntityBuilder
CSharp - Sérialisation XML de vos objets
Magazines - Le n°121 de Programmez est disponible
Adobe - Adobe annonce MAX 2009 !
Outils - WhoIs
[MAJ] Dreamweaver MX + Php + MySql - Les formulaires - partie 3
Mise à jour du code, par DB 77, affichage du code erreur, dans la page erreur.php, traduction des ...
PHP - News avec photo - Système de gestion - affichage
Gestion - Administration - Affichage d'une "News", "Actualité", "Info", ... avec : - mise en forme ...
Outils - Crypt
Dreamweaver Php Mysql - Région répétée imbriquée
Je rebondis, sur un post du forum, pour vous montrer comment obtenir grâce à l'extension Simulated ...
Magazines - Le n° 120 de Programmez est disponible
Gérer les bases de contenu SharePoint - Gérer la croissance du volume des données
Dans le cadre de la gestion quotidienne de ferme SharePoint, il existe une partie qu'il faut ...
PHP - Le Coach PHP sur Visual Studio
.NET - Ecrire une application .NET utilisant MySQL
PHP - Utilisation de PHP dans le monde Microsoft
Magazines - Le n° 119 de Programmez est disponible
Adobe - Adobe annonce Photoshop Marketplace
[MAJ] Tutoriel AJAX simple - En avant vers le WEB2.0
Mis à jour le 20/04/2009
Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
  Scripts : Scripting | ASP-PHP | ASP.net | Divers
  Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
v3b © Didier 2003   
 

Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
 Groupes Utilisateurs Microsoft DotNet Project TechNet ASP-magazine MVP