Page 1 sur 2
Formater un grand nombre
Publié : jeu. 16/oct./2008 3:17
par Guimauve
Bonjour à tous,
J'ai eu besoin d'un commande pour formater un grand nombre. C'est-à-dire que le nombre 1000 est transformé en 1 000, le nombre 100000 devient 100 000.
Je donne le code, s'il peut être utile à quelqu'un..
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Librairie
; Fichier : FormatBigNumber.pb
; Version : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 15-10-2008
; Mise à jour : 15-10-2008
; Codé avec PureBasic V4.30 BETA 3
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure.s FormatBigNumber(Number.q)
Car = 1
String.s = Str(Number)
Longueur = Len(String)
Dim Digit.s(Longueur)
String2.s = String
While String2 <> ""
String2 = Mid(String, Car, 1)
Digit(Car - 1) = String2
Car + 1
Wend
loop = -1
For Index = Longueur To 0 Step -1
If loop < 3
Formatted.s = Digit(Index) + Formatted
loop + 1
Else
Formatted.s = Digit(Index) + " " + Formatted
loop = 1
EndIf
Next
ProcedureReturn Formatted
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< CODE D'ESSAI <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<
Debug FormatBigNumber(1000)
Debug FormatBigNumber(10000)
Debug FormatBigNumber(100000)
Debug FormatBigNumber(1000000)
Debug FormatBigNumber(10000000)
Debug FormatBigNumber(100000000)
Debug FormatBigNumber(1000000000)
Debug FormatBigNumber(10000000000)
Debug FormatBigNumber(100000000000)
Debug FormatBigNumber(1000000000000)
Debug FormatBigNumber(10000000000000)
Debug FormatBigNumber(100000000000000)
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Publié : jeu. 16/oct./2008 5:30
par venom
merci Guimauve pour cette procédure sa pourrai toujours servir un de ces quarte

.
@++
Publié : jeu. 16/oct./2008 7:31
par Kwai chang caine
Merci

Publié : jeu. 16/oct./2008 7:32
par Kwai chang caine
Merci

Publié : jeu. 16/oct./2008 9:48
par Backup
..............
Publié : jeu. 16/oct./2008 14:19
par gnozal
Ou comme çà :
Code : Tout sélectionner
Procedure.s FormatInteger(Number.s)
Protected NumberLen = Len(Number), Start = NumberLen % 3, FormatedNumber.s, i
FormatedNumber = Left(Number, Start)
For i = Start + 1 To NumberLen - Start Step 3
FormatedNumber + " " + Mid(Number, i, 3)
Next
ProcedureReturn LTrim(FormatedNumber)
EndProcedure
Debug RSet(FormatInteger("1"), 14, " ")
Debug RSet(FormatInteger("12"), 14, " ")
Debug RSet(FormatInteger("123"), 14, " ")
Debug RSet(FormatInteger("1234"), 14, " ")
Debug RSet(FormatInteger("12345"), 14, " ")
Debug RSet(FormatInteger("123456"), 14, " ")
Debug RSet(FormatInteger("1234567"), 14, " ")
Debug RSet(FormatInteger("12345678"), 14, " ")
Debug RSet(FormatInteger("123456789"), 14, " ")
Debug RSet(FormatInteger("1234567890"), 14, " ")
Debug RSet(FormatInteger("12345678901"), 14, " ")
Publié : jeu. 16/oct./2008 14:46
par Backup
joli !!

Publié : jeu. 16/oct./2008 15:09
par Kwai chang caine
On se demande pourquoi FREDO y se decarcasse a creer noire d'instructions, puisque GNOZAL il en utilise un minimum

Publié : jeu. 16/oct./2008 22:35
par PAPIPP
Et comme cela trouvé sur le forun anglais
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 StrNumL(Number) : StrNum(Str(Number), 0) : EndMacro
Macro StrNumF(Number) : StrNum(StrF(Number), 4) : EndMacro
Macro StrNumD(Number) : StrNum(StrD(Number), 8) : EndMacro
Macro StrNumQ(Number) : StrNum(StrQ(Number), 0) : EndMacro
Debug StrNumD(-112233445566.778899)
Debug StrNumD(-11223344556600.778899)
Debug Strnumq(1000)
Debug strnumq(10000)
Debug strnumq(100000)
Debug strnumq(1000000)
Debug strnumq(10000000)
Debug strnumq(100000000)
Debug strnumq(1000000000)
Debug strnumq(10000000000)
Debug strnumq(100000000000)
Debug strnumq(1000000000000)
Debug strnumq(10000000000000)
Debug strnumq(100000000000000)

Publié : jeu. 16/oct./2008 23:29
par Le Soldat Inconnu
Dans le même genre de procedure, mais pour les taille de fichier, pour mettre en kb, mb, ou gb
Code : Tout sélectionner
Procedure.s DisplaySize(Taille.q, Unite.l = -1, NbDecimals.l = 0)
; Taille = taille du lecteur
; Unite = unité de la taille, 0 = Octect, 1 = Ko, 2 = Mo, 3 = Go. Si = -1, Le choix de l'unité et du nombre de décimal sera automatique
; NbDecimals = nombre de chiffre après la virgule.
Protected Val.q, Txt.s
If Unite = -1
NbDecimals = 0 : Unite = 0
If Taille >= 1000 : Unite = 1 : NbDecimals = 2 : EndIf
If Taille >= 10000 : Unite = 1 : NbDecimals = 1 : EndIf
If Taille >= 1000000 : Unite = 2 : NbDecimals = 2 : EndIf
If Taille >= 10000000 : Unite = 2 : NbDecimals = 1 : EndIf
If Taille >= 1000000000 : Unite = 3 : NbDecimals = 2 : EndIf
If Taille >= 10000000000: Unite = 3 : NbDecimals = 1 : EndIf
EndIf
Select Unite
Case 0 : Val = 1 : Txt = " octets"
Case 1 : Val = 1024 : Txt = " Ko"
Case 2 : Val = 1024 * 1024 : Txt = " Mo"
Case 3 : Val = 1024 * 1024 * 1024 : Txt = " Go"
EndSelect
ProcedureReturn StrF(Taille / Val, NbDecimals) + Txt
EndProcedure
Debug DisplaySize(100)
Debug DisplaySize(1000)
Debug DisplaySize(10000)
Debug DisplaySize(100000)
Debug DisplaySize(1000000)
Debug DisplaySize(10000000)
Debug DisplaySize(100000000)
Debug DisplaySize(1000000000)
Debug DisplaySize(10000000000)
Debug DisplaySize(100000000000)
Debug DisplaySize(1000000000000)
Heu, question bête, Tera Octet, ca fait To ?, je l'ai jamais vu ce truc la
Publié : jeu. 16/oct./2008 23:36
par Backup
Le Soldat Inconnu a écrit :
Heu, question bête, Tera Octet, ca fait To ?, je l'ai jamais vu ce truc la
oui !!
d'ailleurs au train ou vont les capacités des disques durs , on parlera de tera octets d'ici 2 ans !!

Publié : ven. 17/oct./2008 0:08
par Guimauve
Dobro a écrit :Le Soldat Inconnu a écrit :
Heu, question bête, Tera Octet, ca fait To ?, je l'ai jamais vu ce truc la
oui !!
d'ailleurs au train ou vont les capacités des disques durs , on parlera de tera octets d'ici 2 ans !!

C'est déjà le cas en ce moment, je regarde pour changer mon PC et j'ai trouvé une offre pour un système avec 2 disques durs de 1 Tera octet d'espace chacun.
A+
Guimauve
Publié : ven. 17/oct./2008 7:58
par comtois
ça fait la même chose ce
truc?
Je n'ai pas PB ici pour vérifier
Publié : ven. 17/oct./2008 17:03
par Le Soldat Inconnu
ca à la l'air mais avec une boucle de traitement qui marche en lançant 36 fois la meme procedure, plutot gourmand. Je penche plus pour la solution de Gnozal
Re: Formater un grand nombre
Publié : sam. 12/mai/2012 21:12
par NY152
Les calculs sont faussés je trouve.
1 Ko = 1024 octets
1 Mo = 1024 Ko
etc
Donc mettre des conditions :
If Taille >= 1000 ... <---- ben non pas bon, là on est pas encore à 1 Ko et les écarts se creusent avec la montée en taille et en unité.
Les conversions actuelles sont bonnes pour le format d'unité US où 1000 = 1 Kb etc ...
Pour référence :
1 kilo-octet (ko) = 210 octets = 1 024 o = 1 024 octets, soit 2 ^ 10
1 méga-octet (Mo)= 220 octets = 1 024 ko = 1 048 576 octets
1 giga-octet (Go) = 230 octets = 1 024 Mo = 1 073 741 824 octets
1 téra-octet (To) = 240 octets = 1 024 Go = 1 099 511 627 776 octets
1 péta-octet (Po) = 250 octets = 1 024 To = 1 125 899 906 842 624 octets
1 exa-octet (Eo) = 260 octets = 1 024 Po = 1 152 921 504 606 846 976 octets
1 zetta-octet (Zo) = 270 octets = 1 024 Eo = 1 180 591 620 717 411 303 424 octets
1 yotta-octet (Yo) = 280 octets = 1 024 Zo = 1 208 925 819 614 629 174 706 176 octets