[Résolu] Créer un filtre affichant les décimales non nulles
[Résolu] Créer un filtre affichant les décimales non nulles
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.
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Créer un filtre pour n'afficher que les décimales non nu
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)
(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
Version de PB : 6.00LTS - 64 bits
Re: Créer un filtre pour n'afficher que les décimales non nu
Une façon de faire:
(mais qui ne vérifie rien)

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

Dernière modification par Marc56 le jeu. 02/juin/2016 16:32, modifié 1 fois.
Re: Créer un filtre pour n'afficher que les décimales non nu


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

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
Version de PB : 6.00LTS - 64 bits
Re: Créer un filtre pour n'afficher que les décimales non nu
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Créer un filtre pour n'afficher que les décimales non nu
Par contre:
Bein quoi ?
Oui, je suis mesquin ...
Code : Tout sélectionner
Debug Formater(29.001)
29.00
Oui, je suis mesquin ...

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
Version de PB : 6.00LTS - 64 bits
Re: Créer un filtre pour n'afficher que les décimales non nu
Damned!

Hum? Par contre c'est ce qui était demandé

Si Micoute veut un arrondi plutôt qu'une troncature, alors ce sera plus cherafficher 29.90 plutôt que 30 ou 29.900004

Re: Créer un filtre pour n'afficher que les décimales non nu
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

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

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
Version de PB : 6.00LTS - 64 bits
Re: [Résolu] Créer un filtre affichant les décimales non nul
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: [Résolu] Créer un filtre affichant les décimales non nul
Code : Tout sélectionner
ElseIf nb > "0"
ProcedureReturn nb
Else
ProcedureReturn ""

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
Version de PB : 6.00LTS - 64 bits
Re: [Résolu] Créer un filtre affichant les décimales non nul
7 lignes contre 15, mon produit préserve la planète
(moins d'octets à stocker dans le cloud)
Et si PB avait les opérateurs ternaires (? ... : ...) , on plierait ça en 1 ligne


(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


Re: [Résolu] Créer un filtre affichant les décimales non nul
Comme ça tu veux dire ?
Micoute tu veux faire quoi avec ton 0 ?

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)
Ha oui et on renomerait Pb en C++... Ca serait illisible mais ca ferait pareil une fois compilé...Et si PB avait les opérateurs ternaires (? ... : ...) , on plierait ça en 1 ligne![]()

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
Version de PB : 6.00LTS - 64 bits
Re: [Résolu] Créer un filtre affichant les décimales non nul
Ah, ben non

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

Code : Tout sélectionner
a = Int(a) ? Str(a) : StrF(a,2)
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
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)
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
Version de PB : 6.00LTS - 64 bits