formatage de sortie pour les nombre (separateur milliers)
-
- Messages : 8
- Inscription : ven. 06/janv./2012 3:32
- Localisation : papeete (11 h decalage hor.)
formatage de sortie pour les nombre (separateur milliers)
Bonjour
question : existe t il une fonction pour permettre l'affichage d'un nombre avec le separateur de milliers .
par exemple 9123456.21 devrait se retrouvé affiché 9 123 456.21 ?
et plus globalement un formatage de style : FormatString(mavar,"### ###.##)
merci d avance pour votre reponse.
question : existe t il une fonction pour permettre l'affichage d'un nombre avec le separateur de milliers .
par exemple 9123456.21 devrait se retrouvé affiché 9 123 456.21 ?
et plus globalement un formatage de style : FormatString(mavar,"### ###.##)
merci d avance pour votre reponse.
Re: formatage de sortie pour les nombre (separateur milliers
un truc du genre :
Code : Tout sélectionner
a$="12351255.687435554"
For i=1 To Len(a$)
If Mid(a$,i,1)="."
Goto ok
EndIf
Next
ok:
If i=7
b$=Mid(a$,i-6,3)+" "+Mid(a$,i-3,Len(a$))
EndIf
If i=8
b$=Mid(a$,i-7,1)+" "+Mid(a$,i-6,3)+" "+Mid(a$,i-3,Len(a$))
EndIf
If i=9
b$=Mid(a$,i-8,2)+" "+Mid(a$,i-6,3)+" "+Mid(a$,i-3,Len(a$))
EndIf
If i=10
b$=Mid(a$,i-9,3)+" "+Mid(a$,i-6,3)+" "+Mid(a$,i-3,Len(a$))
EndIf
If i=11
b$=Mid(a$,i-10,1)+" "+Mid(a$,i-9,3)+" "+Mid(a$,i-6,3)+" "+Mid(a$,i-3,Len(a$))
EndIf
If i=12
b$=Mid(a$,i-11,2)+" "+Mid(a$,i-9,3)+" "+Mid(a$,i-6,3)+" "+Mid(a$,i-3,Len(a$))
EndIf
If i=13
b$=Mid(a$,i-12,3)+" "+Mid(a$,i-9,3)+" "+Mid(a$,i-6,3)+" "+Mid(a$,i-3,Len(a$))
EndIf
Debug b$
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: formatage de sortie pour les nombre (separateur milliers
Salut a tous
une autre solution
une autre solution
Code : Tout sélectionner
Procedure.s Formatmonnaie(valeur$)
ind = 0
ReplaceString(valeur$, ".", ",", #PB_String_InPlace, 1)
For x = Len(valeur$) To 1 Step -1
ind = ind + 1
valeur2$ = valeur2$ + Mid(valeur$,x,1)
If ind = 3
ind = 0
If Mid(valeur$,x,1) <> ","
valeur2$ = valeur2$ + " "
EndIf
EndIf
Next
ProcedureReturn ReverseString(valeur2$)
EndProcedure
Debug Formatmonnaie("123456789.29")
Re: formatage de sortie pour les nombre (separateur milliers
Il existe aussi cette procédure:
Code : Tout sélectionner
Procedure.s StrNum(Number.s, decimal.l = 2) ; Formats a number string as a number string customized for a specified locale.
Protected result.s, fmt.NUMBERFMT
fmt\NumDigits = decimal ; Specifies the number of fractional digits.
fmt\LeadingZero = 0 ; Specifies whether to use leading zeroes in decimal fields.
fmt\Grouping = 3 ; Specifies the size of each group of digits to the left of the decimal.
fmt\lpDecimalSep = @"," ; Pointer to a null-terminated decimal separator string.
fmt\lpThousandSep = @"." ; Pointer to a null-terminated thousand separator string.
fmt\NegativeOrder = 1 ; Specifies the negative number mode (LOCALE_INEGNUMBER).
result = Space(GetNumberFormat_(0, 0, Number, fmt, 0, 0))
GetNumberFormat_(0, 0, Number, fmt, @result, Len(result))
ProcedureReturn result
EndProcedure
Macro Mille(Number)
StrNum(StrF(Number), 2)
EndMacro
Debug Mille(8125243.67)
Re: formatage de sortie pour les nombre (separateur milliers
Salut a tous !
Une commande en natif du genre PrintUsing (####.##) serait d'une grande utilité.
Elle a déjà était demandé, hélas FRED n'est pas très pressé.
Cela fait partie de toute ces petite chose qui manque a PB, pour être (a mon gout) dans la cours des grand.
Enfin, pour un vrai PrintUsing()
+1 (je vote pour)
A+!
Une commande en natif du genre PrintUsing (####.##) serait d'une grande utilité.

Elle a déjà était demandé, hélas FRED n'est pas très pressé.

Cela fait partie de toute ces petite chose qui manque a PB, pour être (a mon gout) dans la cours des grand.
Enfin, pour un vrai PrintUsing()
+1 (je vote pour)
A+!
Re: formatage de sortie pour les nombre (separateur milliers
ouaip un truc comme ça 

Code : Tout sélectionner
Procedure.s printusing(txt.s,mask.s,ForceMask.b=#False)
; de Thyphoon
Result.s=""
Quit=#False
lt.b=Len(txt)+1
lm.b=Len(mask)+1
Repeat
c.s=Mid(mask,lm,1)
If c="#" And lt>0
Result=Mid(txt,lt,1)+Result
lt=lt-1
lm=lm-1
ElseIf c<>"" And lm>0
Result=c+Result
lm=lm-1
Else
lt=lt-1
lm=lm-1
EndIf
Until (ForceMask=#False And lt<1) Or (ForceMask=#True And lm<1 And lt<1)
ProcedureReturn Result
EndProcedure
Debug printusing("1250","###,###")
Debug printusing("8080000","### ### ### ###")
Debug printusing("26122009","##-##-####")
Debug printusing(RSet(Str(1250333), 9, "0"),"$### ### ###",#True)
Re: formatage de sortie pour les nombre (separateur milliers
Le code le plus puissant et petit jamais fait :
Code : Tout sélectionner
a$="12345.6789"
For i=1 To Len(a$)
If Mid(a$,i,1)="."
Goto ok12345
EndIf
Next
ok12345:
b$=Mid(a$,i-3,Len(a$))
s=0
For u=i-4 To 1 Step-1
If s=0
b$=" "+b$
EndIf
s+1 : s%3
b$=Mid(a$,u,1)+b$
Next
Debug b$
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: formatage de sortie pour les nombre (separateur milliers
Salut SPH
oui mais sans GOTO

oui mais sans GOTO

Code : Tout sélectionner
a$="12345.6789"
For i=1 To Len(a$)
If Mid(a$,i,1)="."
Break
EndIf
Next
b$=Mid(a$,i-3,Len(a$))
s=0
For u=i-4 To 1 Step-1
If s=0
b$=" "+b$
EndIf
s+1 : s%3
b$=Mid(a$,u,1)+b$
Next
Debug b$


Re: formatage de sortie pour les nombre (separateur milliers
Bien joué, je n'utilise jamais les break (mais je vais m'y mettre now) 

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: formatage de sortie pour les nombre (separateur milliers
Une autre solution avec une seule boucle
Code : Tout sélectionner
a$ = "123123123.36"
i.w=0
For x = Len(a$) To 1 Step -1
i + 1
If Mid(a$,x,1) <> "." And i= 3
b$ = " " + Mid(a$,x,1)+ b$
i + 1
Else
b$ = Mid(a$,x,1) + b$
If Mid(a$,x,1) = ".": i = 0:EndIf
EndIf
If i > 3 : i = 0: EndIf
Next
Debug b$
Re: formatage de sortie pour les nombre (separateur milliers
Nan, ca plante :MLD a écrit :Une autre solution avec une seule boucle
Code : Tout sélectionner
a$ = "123123123.36" i.w=0 For x = Len(a$) To 1 Step -1 i + 1 If Mid(a$,x,1) <> "." And i= 3 b$ = " " + Mid(a$,x,1)+ b$ i + 1 Else b$ = Mid(a$,x,1) + b$ If Mid(a$,x,1) = ".": i = 0:EndIf EndIf If i > 3 : i = 0: EndIf Next Debug b$
a$ = "12.4567"
Code : Tout sélectionner
12.4 567
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: formatage de sortie pour les nombre (separateur milliers
SPH
oui oui. c'est pour un format monétaire 3 chiffres aprés la vigule max.

oui oui. c'est pour un format monétaire 3 chiffres aprés la vigule max.

Code : Tout sélectionner
Procedure.s Formatmonnaie(a$)
ReplaceString(a$, ".", ",", #PB_String_InPlace, 1)
i.w=0
For x = Len(a$) To 1 Step -1
b$ = Mid(a$,x,1)
i + 1
If b$ <> "," And i= 3
c$ = " " + b$ + c$
i + 1
Else
c$ = b$ + c$
If b$ = ",": i = 0:EndIf
EndIf
If i > 3 : i = 0: EndIf
Next
ProcedureReturn c$
EndProcedure
Debug Formatmonnaie("123456789.296")

Re: formatage de sortie pour les nombre (separateur milliers
Je mets un code qui a une vocation didactique.
Mesa.
Code : Tout sélectionner
Procedure.s FormatString_Separateur_de_Milliers(chaine$)
Nombre_Negatif$ = "NON"
;cas particuliers des nombres négatifs, on enlève le signe
If FindString(Chaine$, "-", 1) > 0
Nombre_Negatif$ = "OUI"
chaine$ = RemoveString(chaine$, "-", #PB_String_NoCase, 1, 1)
EndIf
Longueur=Len(chaine$)
Position_Virgule=FindString(Chaine$, ".", 1)
;si le point "." n'est pas trouvé, on cherche la virgule ","
If Position_Virgule=0
Position_Virgule=FindString(Chaine$, ",", 1)
EndIf
;cas particulier des nombres entiers
If Position_Virgule=0
Position_Virgule = Longueur + 1
EndIf
Partie_gauche$ = Left(Chaine$,Position_Virgule-1)
Partie_Droite$ = Right(Chaine$, Longueur - Position_Virgule+1)
Nombre_Espace_a_Prevoir = (Len(Partie_gauche$))/3
; Pour inserer les espaces, il est plus facile d'inverser la chaine en premier
chaine_inverse$ = ReverseString(Partie_gauche$)
; insertion des espaces tous les 3 chiffres + l'espace lui-même = 4 caractères
For i=1 To Nombre_Espace_a_Prevoir
chaine_inverse$ = InsertString(chaine_inverse$, " ", 4*i)
Next i
; on inverse et on ajoute la partie décimale
Resultat.s=ReverseString(chaine_inverse$) + Partie_Droite$
; si le nombre était négatif on ajoute le "-" qui sera toujours collé au bon endroit
If Nombre_Negatif$ = "OUI"
Resultat = "-" + Resultat
EndIf
ProcedureReturn Resultat
EndProcedure
a$ = "12351255.687435554"
b$ = "1234567"
c$ = "-1245789.9865"
d$ = "-1245789"
Debug FormatString_Separateur_de_Milliers(a$)
Debug FormatString_Separateur_de_Milliers(b$)
Debug FormatString_Separateur_de_Milliers(c$)
Debug FormatString_Separateur_de_Milliers(d$)
-
- Messages : 8
- Inscription : ven. 06/janv./2012 3:32
- Localisation : papeete (11 h decalage hor.)
Re: formatage de sortie pour les nombre (separateur milliers
Hé bien ! quelle réactivité de votre part ! j'en suis estomaqué et en meme temps rassuré car oui,avec cette entourage bienveillant je vais me mettre vraiment a pure basic meme s'il manque encore quelques fonctions necessaires a l'elaboration de progiciels costauds style comptabilité et gescom.
Encore merci .
Encore merci .

-
- Messages : 8
- Inscription : ven. 06/janv./2012 3:32
- Localisation : papeete (11 h decalage hor.)
Re: formatage de sortie pour les nombre (separateur milliers
Un petit retour sur les solutions genereusement indiquées.
Dobro : La solution 'by Typhoon' a le merite d'imposer un format de resultat. (### ###.###)
c'est donc celle ci que je retiens bien que toutes offrent de bons resultats.
le seul petit hic est que dans le cas d'une valeur entiere pile poil et que je demande d'imposer 2 chiffres apres la virgule il se fait un decalage
ex : 12345.32 avec ### ###.## --->12 345.32
mais 12345 avec ### ###.## ---> 123.45 au lieu de 12 345.00
faut donc penser a bien initialiser le texte a envoyer a la fonction.
et en fin un petit rset(resultat,len(mask)) pour cadrer a droite de la zone d'affichage et tout baigne.(penser a oter les espaces dans le len)
merci encore
Dobro : La solution 'by Typhoon' a le merite d'imposer un format de resultat. (### ###.###)
c'est donc celle ci que je retiens bien que toutes offrent de bons resultats.
le seul petit hic est que dans le cas d'une valeur entiere pile poil et que je demande d'imposer 2 chiffres apres la virgule il se fait un decalage
ex : 12345.32 avec ### ###.## --->12 345.32
mais 12345 avec ### ###.## ---> 123.45 au lieu de 12 345.00
faut donc penser a bien initialiser le texte a envoyer a la fonction.
et en fin un petit rset(resultat,len(mask)) pour cadrer a droite de la zone d'affichage et tout baigne.(penser a oter les espaces dans le len)
merci encore