Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/03/2007, 15h56   #1
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
Par défaut format de nombre

Bonjour,
je souhaite formater un nombre de façon à ce que le nombre de chiffres après la virgule soit limité à deux et que les milliers soient séparés.

ex: 1250,12647 donnerait: 1 250,13

La fonction formatnumber répond à ce problème, mais pour un entier elle rajoute 2 zéro.

ex: 1250 donne: 1250,00
et 150,4 donne 1250,40

moi je veux juste limiter à 2 c'est à dire 2 au maximum mais je veux que les entiers et les nombres n'ayant que un chiffre après la virgule reste tel quel.

J'ai essayer d'écrire une fonction où je transforme mes nombre en chaine de caractère et où je les formatte ensuite, le résultat et bon mais comme j'ai beaucoup de nombre la page mettait dix ans a s'afficher..

Pouvez-vous m'aider?
merci.
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2007, 12h31   #2
Membre éprouvé
 
Inscription : septembre 2004
Messages : 368
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 368
Points : 402
Points : 402
Salut

Il existe des fonctions ASP qui peuvent t'aider, et pour être encore plus efficace selon le contexte de ton besoin, je te conseille ceci :

Citation:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<%
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
%>
Gwenn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2007, 10h33   #3
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
salut et merci de ta réponse.
J'ai regardé ce code que tu m'a conseillé, mais je n'y trouve pas ce que je veux.
J'avais déja écris une fonction de ce genre, mais le fait de parcourir chaque caractère de mon nombre met un temps fou, vu le nombre de nombre (désolé pour la répétition) à parcourir.

Pour ce qui est des fonctions asp, la seule que j'ai trouvé c'est format number, mais comme je l'ai déja expliquée, cette fonction rajoute des zéros quand le nombre est un entier.

Moi je recherche une fonction qui puissent limiter l'affichage de mes nombres à 2 décimales maximum. si mon nombre en à une seule à la base comme 12.5 par ex je veux pas qu'il devienne 12.50.

j'ai égallement essayer de multiplier par 100 puis de transformer en entier et divise par 100:

nb=clng(nb*100)/100 ca marche nikel mais j'ai de grand nombre et si je les multiplie par 100 j'ai des dépassements de capacité avec access.

pour le séparateur de millier tout ce que j'ai trouvé c'est formatnumber mais comme je l'ai déja dis cette fonction ne réponds pas à mes attentes

merci
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2007, 18h10   #4
LEK
Membre éclairé
 
Inscription : mai 2005
Messages : 596
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 596
Points : 363
Points : 363
Je pense qu'effectivement la fonction la plus adaptée à ton problème est le formatNumber : elle répondera plus rapidement car native au langage, je serais toi je composerais à partir de là.
Quel est réeelement ton problème : lorsque tu traites des float/double, elle répond à ton problème par contre lorsque tu traites des entiers tu voudrais supprimer les nombres derrière la virgule. La fonction formatNumber se décline ainsi :
Code :
FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])
Je te propose donc d'écrire une fonction qui te renvoie 0 chiffre après la virgule s'il s'agit d'un entier (à priori il n'aura pas de virgule) et 2 chiffres s'il s'agit d'un nombre à virgule :
Code :
1
2
3
4
5
6
7
8
 
Function FormatMyNum(num)
 if instr(num,",")>0 or instr(num,".")>0 Then
	 FormatMyNum = FormatNumber(num,2)
 else
	 FormatMyNum = FormatNumber(num,0)
 end if
end function
Enfin tu vois le principe ;-)
LEK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2007, 16h32   #5
Membre du Club
 
Inscription : février 2007
Messages : 172
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 172
Points : 44
Points : 44
salut et merci de ta réponse.
c'est ce que j'ai fait et effectivement ca fonctionne.
mohcultiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h40.


 
 
 
 
Partenaires

Hébergement Web