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)

Code : Tout sélectionner

300
29.90
(mais qui ne vérifie rien)
:wink:

Re: Créer un filtre pour n'afficher que les décimales non nu

Publié : jeu. 02/juin/2016 16:30
par Fig
Image :mrgreen:

Le plus court chemin est toujours la ligne droite... :oops:

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:

Code : Tout sélectionner

Debug Formater(29.001)

29.00
Bein quoi ?

Oui, je suis mesquin ... :mrgreen:

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)

Code : Tout sélectionner

29.00
Bein quoi ? ... :P
Damned! 8O
Hum? Par contre c'est ce qui était demandé :mrgreen:
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 :wink:

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... :mrgreen:

Je suis d'une mauvaise foi quand je suis vexé raaaah :twisted:

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

Code : Tout sélectionner

  ElseIf nb > "0"
    ProcedureReturn nb
  Else
    ProcedureReturn ""
je me demande si cette partie fonctionne par chance ou si tu voulais vraiment comparer les deux valeurs ascii... :wink:

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 :o
(moins d'octets à stocker dans le cloud) :mrgreen:

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é... :lol:

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 :o

Code : Tout sélectionner

Debug formater(5.001) 
Debug formater(5) 
Debug formater(5.01) 

Code : Tout sélectionner

5
5
5

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 :)

Code : Tout sélectionner

a = Int(a) ? Str(a) : StrF(a,2)
(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 :wink:

Re: [Résolu] Créer un filtre affichant les décimales non nul

Publié : jeu. 02/juin/2016 17:24
par Fig
beurk :roll:

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)

Code : Tout sélectionner

5.01
5
5