Page 1 sur 2
					
				[Résolu] Créer un filtre affichant les décimales non nulles
				Publié : jeu. 02/juin/2016 16:05
				par Micoute
				Bonjour à tous,
je viens encore solliciter votre aide pour faire un filtre qui afficherait des valeurs entières sauf si les décimales sont supérieures à 0. Par exemple, je voudrais afficher 300 plutôt que 300.00, mais j'aimerais afficher 29.90 plutôt que 30 ou 29.900004, ce n'est pas bien grave, c'est juste pour l'esthétique.
Je vous remercie par avance.
			 
			
					
				Re: Créer un filtre pour n'afficher que les décimales non nu
				Publié : jeu. 02/juin/2016 16:17
				par Fig
				Une manière de faire possible...
(attention aux floats et à leur traitement en mode décimal qui nous est commun, les valeurs changeront inévitablement parfois)
Code : Tout sélectionner
Procedure AfficheNombre(nombre.d,nbdec.i)
  nb.s=StrD(nombre)
  a=FindString(nb,".")
  If a
    If Right(Left(nb,a+nbdec),2)<>"00"
      Debug Left(nb,a+nbdec)
    Else
      Debug Left(nb,a-1)
    EndIf
  Else
    Debug nb
  EndIf
EndProcedure
afficheNombre(#PI,2)
afficheNombre(3.001,2)
afficheNombre(3.00,2)
afficheNombre(3,2)
 
			
					
				Re: Créer un filtre pour n'afficher que les décimales non nu
				Publié : jeu. 02/juin/2016 16:24
				par Marc56
				Une façon de faire:
Code : Tout sélectionner
Procedure.s Formater(a.f)
    If a = Int(a)
        ProcedureReturn Str(a)
    Else
        ProcedureReturn StrF(a,2)
    EndIf
EndProcedure
Debug Formater(300)
Debug Formater(29.900004)
(mais qui ne vérifie rien)
 

 
			
					
				Re: Créer un filtre pour n'afficher que les décimales non nu
				Publié : jeu. 02/juin/2016 16:30
				par Fig
				
			 
			
					
				Re: Créer un filtre pour n'afficher que les décimales non nu
				Publié : jeu. 02/juin/2016 16:37
				par Micoute
				Déjà ? Là, j'ai été surpris d'avoir des réponses aussi rapidement et je vous en remercie tous du fond de mon coeur.
			 
			
					
				Re: Créer un filtre pour n'afficher que les décimales non nu
				Publié : jeu. 02/juin/2016 16:46
				par Fig
				Par contre:
Bein quoi ?  
Oui, je suis mesquin ...    

 
			
					
				Re: Créer un filtre pour n'afficher que les décimales non nu
				Publié : jeu. 02/juin/2016 16:50
				par Marc56
				Fig a écrit :Par contre:
Debug Formater(29.001)
Bein quoi ?  ...   

 
Damned!  
 
 
Hum? Par contre c'est ce qui était demandé  
 
 
afficher 29.90 plutôt que 30 ou 29.900004
Si Micoute veut un 
arrondi plutôt qu'une 
troncature, alors ce sera plus cher   

 
			
					
				Re: Créer un filtre pour n'afficher que les décimales non nu
				Publié : jeu. 02/juin/2016 16:54
				par Fig
				Il n'a rien dit à ce propos, juste que pour des raisons esthétiques qui lui sont propres, il ne veut pas voir deux zéro derrière la virgule qui s'affichent de manière vulgaires et dégoutantes...  
 
 
Je suis d'une mauvaise foi quand je suis vexé raaaah   

 
			
					
				Re: [Résolu] Créer un filtre affichant les décimales non nul
				Publié : jeu. 02/juin/2016 16:56
				par Micoute
				Merci, c'est bon, j'ai tout ce qu'il me faut et j'ai adapter à mon cas.
Code : Tout sélectionner
Procedure.s AfficherNombre(nombre.d,nbdec.i=2)
  Protected nb.s=StrF(nombre)
  Protected a=FindString(nb,".")
  If a
    If Right(Left(nb,a+nbdec),2)<>"00"
      ProcedureReturn Left(nb,a+nbdec)
    Else
      ProcedureReturn Left(nb,a-1)
    EndIf
  ElseIf nb > "0"
    ProcedureReturn nb
  Else
    ProcedureReturn ""
  EndIf
EndProcedure
 
			
					
				Re: [Résolu] Créer un filtre affichant les décimales non nul
				Publié : jeu. 02/juin/2016 17:02
				par Fig
				
je me demande si cette partie fonctionne par chance ou si tu voulais vraiment comparer les deux valeurs ascii...  
 
On doit pouvoir simplifier tout ça en s'appuyant sur le code de Marc plutôt...
 
			
					
				Re: [Résolu] Créer un filtre affichant les décimales non nul
				Publié : jeu. 02/juin/2016 17:04
				par Marc56
				7 lignes contre 15, mon produit préserve la planète   
 
 
(moins d'octets à stocker dans le cloud)  
 
Code : Tout sélectionner
Procedure.s Formater(a.f)
    If a = Int(a)
        ProcedureReturn Str(a)
    Else
        ProcedureReturn StrF(a,2)
    EndIf
EndProcedure
Et si PB avait les opérateurs ternaires (? ... : ...) , on plierait ça en 1 ligne 
 
    
 
			
					
				Re: [Résolu] Créer un filtre affichant les décimales non nul
				Publié : jeu. 02/juin/2016 17:13
				par Fig
				Comme ça tu veux dire ?
Code : Tout sélectionner
Procedure.s Formater(a.f)
    If Val(StrF(a,2)) = Int(a)
        ProcedureReturn Str(a)
    Else
        ProcedureReturn StrF(a,2)
    EndIf
  EndProcedure
Debug formater(5.001)
Micoute tu veux faire quoi avec ton 0 ?
Et si PB avait les opérateurs ternaires (? ... : ...) , on plierait ça en 1 ligne 
 
    
Ha oui et on renomerait Pb en C++... Ca serait illisible mais ca ferait pareil une fois compilé...  

 
			
					
				Re: [Résolu] Créer un filtre affichant les décimales non nul
				Publié : jeu. 02/juin/2016 17:18
				par Marc56
				Ah, ben non  
 
 
 
			
					
				Re: [Résolu] Créer un filtre affichant les décimales non nul
				Publié : jeu. 02/juin/2016 17:22
				par Marc56
				On ferait un truc joli, de ce style  
 
 
(bon, il faudrait remplacer le séparateur ":" par autre chose ou prendre en compte qu'il est précédé par "?" sur la même ligne)
L'opérateur ternaire existe dans tous les langages et dans les tableurs, pourquoi PB ne l'a pas ?  

Siouplait', Fred  

 
			
					
				Re: [Résolu] Créer un filtre affichant les décimales non nul
				Publié : jeu. 02/juin/2016 17:24
				par Fig
				beurk  
 
Code : Tout sélectionner
Procedure.s Formater(a.f)
    If ValF(StrF(a,2)) = Int(a)
        ProcedureReturn Str(a)
    Endif
        ProcedureReturn StrF(a,2)
  EndProcedure
  Debug formater(5.01)
  Debug formater(5.001)
  Debug formater(5.00)