[Résolu] Créer un filtre affichant les décimales non nulles

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Créer un filtre affichant les décimales non nulles

Message 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.
Dernière modification par Micoute le jeu. 02/juin/2016 16:53, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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)
Dernière modification par Fig le jeu. 02/juin/2016 17:07, modifié 2 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Dernière modification par Marc56 le jeu. 02/juin/2016 16:32, modifié 1 fois.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message par Fig »

Image :mrgreen:

Le plus court chemin est toujours la ligne droite... :oops:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message par Fig »

Par contre:

Code : Tout sélectionner

Debug Formater(29.001)

29.00
Bein quoi ?

Oui, je suis mesquin ... :mrgreen:
Dernière modification par Fig le jeu. 02/juin/2016 16:50, modifié 1 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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 :!: :)
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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:
Dernière modification par Fig le jeu. 02/juin/2016 17:18, modifié 1 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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
Dernière modification par Fig le jeu. 02/juin/2016 17:28, modifié 2 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Répondre