Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015 Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada
Message
par Guimauve » jeu. 16/oct./2008 3:17
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
venom
Messages : 3137 Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :
Message
par venom » jeu. 16/oct./2008 5:30
merci Guimauve pour cette procédure sa pourrai toujours servir un de ces quarte
.
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Backup
Messages : 14526 Inscription : lun. 26/avr./2004 0:40
Message
par Backup » jeu. 16/oct./2008 9:48
..............
Dernière modification par
Backup le dim. 02/oct./2011 13:09, modifié 1 fois.
gnozal
Messages : 832 Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :
Message
par gnozal » jeu. 16/oct./2008 14:19
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, " ")
Kwai chang caine
Messages : 6989 Inscription : sam. 23/sept./2006 18:32
Localisation : Isere
Message
par Kwai chang caine » jeu. 16/oct./2008 15:09
On se demande pourquoi FREDO y se decarcasse a creer noire d'instructions, puisque GNOZAL il en utilise un minimum
PAPIPP
Messages : 534 Inscription : sam. 23/févr./2008 17:58
Message
par PAPIPP » jeu. 16/oct./2008 22:35
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)
Le Soldat Inconnu
Messages : 4312 Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :
Message
par Le Soldat Inconnu » jeu. 16/oct./2008 23:29
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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64) ]
Backup
Messages : 14526 Inscription : lun. 26/avr./2004 0:40
Message
par Backup » jeu. 16/oct./2008 23:36
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 !!
Guimauve
Messages : 1015 Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada
Message
par Guimauve » ven. 17/oct./2008 0:08
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
comtois
Messages : 5186 Inscription : mer. 21/janv./2004 17:48
Contact :
Message
par comtois » ven. 17/oct./2008 7:58
ça fait la même chose ce
truc ?
Je n'ai pas PB ici pour vérifier
Le Soldat Inconnu
Messages : 4312 Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :
Message
par Le Soldat Inconnu » ven. 17/oct./2008 17:03
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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64) ]
NY152
Messages : 148 Inscription : dim. 14/mai/2006 20:41
Message
par NY152 » sam. 12/mai/2012 21:12
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
.:NY152:.