formatage de sortie pour les nombre (separateur milliers)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: formatage de sortie pour les nombre (separateur milliers

Message par Guimauve »

Bonjour à tous,

Une version créé par Gnozal en 2008, J'ai ajouté le formatage des variables flottantes (Float et Double)

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : FormatInteger()
; Nom du Fichier : FormatInteger.pbi
; Version du fichier : 1.0.0
; Programmation : OK
; Programmé par : Gnozal
; Date : 17-10-2008
; Mise à jour : 07-10-2011
; Codé avec PureBasic V4.60
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure.s FormatInteger(Number.s)
  
  NumberLen = Len(Number)
  Start = NumberLen % 3
  FormatedNumber.s = Left(Number, Start)
  
  For i = Start + 1 To NumberLen - Start Step 3
    FormatedNumber + " " + Mid(Number, i, 3)
  Next
  
  ProcedureReturn LTrim(FormatedNumber)
EndProcedure

Macro FormatDouble(Number)
  
  FormatInteger(StringField(Number, 1, ".")) + "." + StringField(Number, 2, ".")
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< CODE D'ESSAI <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<

Debug FormatInteger("1000")
Debug FormatInteger("10000")
Debug FormatInteger("100000")

Debug FormatDouble("1000.25")
Debug FormatDouble("10000.32")
Debug FormatDouble("100000.14")

; Debug FormatInteger("1000000")
; Debug FormatInteger("10000000")
; Debug FormatInteger("100000000")
; Debug FormatInteger("1000000000")
; Debug FormatInteger("10000000000")
; Debug FormatInteger("100000000000")
; Debug FormatInteger("1000000000000")
; Debug FormatInteger("10000000000000")
; Debug FormatInteger("100000000000000")

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
A+
Guimauve
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: formatage de sortie pour les nombre (separateur milliers

Message par SPH »

Guimauve : ton code est tres puissant aussi :P

!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
brossden
Messages : 821
Inscription : lun. 26/janv./2004 14:37

Re: formatage de sortie pour les nombre (separateur milliers

Message par brossden »

Bonjour à tous

Je voudrais vous proposer un petit "PrintUsing" qui je pense peut afficher n'importe quel format.

Code : Tout sélectionner

Procedure.s PrintUsing(Chaine.s, Format.s)
  If Left(Chaine,1)="-" 
    Sign.s = "-"
    Chaine = Mid(Trim(Chaine),2)
  Else
    Sign.s=""
  EndIf
  PosVirgCh = FindString(Trim(Chaine),".",1)
  
  If PosVirgCh = 0 : PosVirgCh = Len(Trim(Chaine))+1 : EndIf
  PosvirgFo = FindString(Format,".",1)
  If PosvirgFo = 0 : PosvirgFo = Len(Trim(Format))+1 : EndIf
  NbrCarFo = CountString(Mid(Format,1,PosvirgFo),"#")
  NbrDecFo = CountString(Mid(Format,PosvirgFo),"#")
  NbrCarCh = PosVirgCh-1
  PosSep =1
  While Mid(Format,PosSep,1)="#"
    PosSep+1
  Wend
  Sep.s=Mid(Format,PosSep,1)
  NbrCarNFo = NbrCarFo
  DerCarFo.s= Mid(Trim(Format),1,PosSep)
  NFormat.s = Mid(Trim(Format),1,PosvirgFo-1)
  While NbrCarNFo < NbrCarCh
    NFormat.s = DerCarFo + NFormat
    NbrCarNFo + PosSep -1
  Wend
  Nchaine.s = Mid(Trim(Chaine),1,PosVirgCh-1)
  Ret.s = LSet(Mid(Trim(Chaine),PosVirgCh+1),NbrDecFo,"0")
  If NbrDecFo > 0
    Ret = "."+Ret
  EndIf
  CarCh =1
  For CarFo = 1 To Len(NFormat)
    Car.s = Left(Right(NFormat,CarFo),1)
    If Car ="#"
      Ret = Left(Right(Nchaine,CarCh),1)+Ret
      CarCh+1
    Else
      Ret = Car + Ret
    EndIf
    If CarCh > Len(Nchaine)
      CarFo = Len(NFormat)
    EndIf
  Next
  ProcedureReturn  Sign + Ret
EndProcedure

; Test
MessageRequester("Résultat",PrintUsing("-123.00","### ###"))
MessageRequester("Résultat",PrintUsing("-123","### ###.##"))
MessageRequester("Résultat",PrintUsing("-123.456","### ###.##"))
MessageRequester("Résultat",PrintUsing("1234567890.5","###,###.##"))
MessageRequester("Résultat",PrintUsing("12345678905258","##/## ##:##"))

Denis

Bonne Jounée à tous
brossden
Messages : 821
Inscription : lun. 26/janv./2004 14:37

Re: formatage de sortie pour les nombre (separateur milliers

Message par brossden »

Je me rend compte que le code est un peu incompréhensible, si cela intéresse quelqu'un je peux annoter le code pour éclaircir algorithme.
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: formatage de sortie pour les nombre (separateur milliers

Message par graph100 »

et personne n'a pensé à faire affichage scientifique par hasard ?
du genre :
145.8964 --> 145.8964
115450000 --> 11545e4
115450001 --> 11 545 001
0.0001548 --> 1.548e-4
et surtout pour les floats/double :
0.000000000000000000000000008895 --> 8.895e-27
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
brossden
Messages : 821
Inscription : lun. 26/janv./2004 14:37

Re: formatage de sortie pour les nombre (separateur milliers

Message par brossden »

Graph100

Regarde le titre du sujet il ne correspond pas à ta demande !

Sauf erreur de ma part l'affichage scientifique de correspond pas à tes exemples !

Quelque soit la valeur à afficher elle est représentée par un seul chiffre au dessus de la virgule, puis les décimales et enfin E suivit de l'exposant de 10
soit
0.15 > 1,5 E -1
1.5 >1.5 E 0
15 > 1.5 E 1
150 > 1.5 E 2

etc.....

Voir ici :
http://fr.wikipedia.org/wiki/Notation_scientifique
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: formatage de sortie pour les nombre (separateur milliers

Message par graph100 »

ouep ;)
je parle d'un affichage scientifique à notre sauce. et comme cela est lié au sujet car c'est un formatage pour les nombres, j'm'suis dis que pit'être je pourrais en parler ici :)

je suis en train de faire un gadget pour tracer des graphiques, et j'ai débusqué un lapin : l'affichage des nombres sur les axes, problématique lorsqu'ils sont trop long, ou bien grand mais avec une faible variation, ou très petit.

voila voila
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre