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)