PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Pb Idiot...comparaison de numériques
Pb Idiot...comparaison de numériques
Iniciado por xavier.laurent, jul., 08 2005 2:00 PM - 8 respostas
Publicado em julho, 08 2005 - 2:00 PM
J'ai un vrai problème idiot,
J'ai une colonne d'un tableau indiquant des taux de tva liée à un fichier HF, ce sont donc des valeurs numériques avec un masque de type 99,99.
Je veux faire un filtre en posant une condition de type fichier.TxTVA=tva_choisie
où tva_choisie est de type numérique.

Or quand je veux attribuer une valeur à tva_choisie, la ',' est refusée et si je mets un '.', la comparaison me renvoie faux systématiquement

ma question:
Comment dois-je écrire tva_choisie,60 (par ex)

pour que ma comparaison soit valide...
Publicado em julho, 08 2005 - 3:28 PM
bonjour,

si la rubrique fichier.TxTVA est de type réel alors tu peux avoir des problème à cause des décimales (depuis windev 7.5 ... merci pcsoft)
c'est peut-être pour cela qu'il te renvoie toujours faut quand tu mets un '.' (ce qu'il faut faire)
Publicado em julho, 08 2005 - 3:57 PM
Merci York,

Mais je suis pas beaucoup plus avancé...

Help!!!!!
Publicado em julho, 08 2005 - 4:04 PM
essaye : valchoisi=PartieEntiere(valchoisi)+PartieDecimal(valchoisi)


vraiment a tout azar
Publicado em julho, 08 2005 - 4:07 PM
J'ai trouvé et je poste pour si quelq'un tombe sur le pb:


En fait il vaut mieu utiliser une variable chaîne et la comparer au numérique de la table grâce à ~=.

Contre toute logique ça marche.
Publicado em julho, 08 2005 - 4:08 PM
bon alors essayons de trouver une soluce

et si tu déclares une variable de type réel qui reçoit le taux de tva qui a été saisi et que tu te sers de cette variable dans ton test ?
Publicado em julho, 08 2005 - 4:49 PM
Bonjour,

TU peux aussi déclarer deux entiers, multiplier par 100 et réaliser une comparaison exacte.

Ou encore utiliser directement la syntaxe du à peu près égal, sans rien changer.

Bien cordialement,

Jacques De Schryver
Publicado em julho, 08 2005 - 4:50 PM
pour ce genre de traitement, en windev, il vaut mieux éviter les réels et
utiliser
des monétaires...

et d'une manière générale, si r1 et r2 sont des réels,
on ne fait teste pas r1 = r2
mais abs(r1 - r2) <= valtest
avec valtest est un réel "assez" petit du genre 0.00001...

c'est ainsi que "marchent" les réels dans tous langages...

voilà, bon courage ;)

"Tchavi" <xavier.laurent@cerp-bn.com> a écrit dans le message de news:
42ce61cc$1@news.pcsoft.fr...



J'ai trouvé et je poste pour si quelq'un tombe sur le pb:


En fait il vaut mieu utiliser une variable chaîne et la comparer au
numérique de la table grâce à ~=.

Contre toute logique ça marche.
Publicado em julho, 08 2005 - 5:14 PM
Bonjour,

Complément d'information.



L'imprécision (relative) des réels sur les décimales provient du codage
binaire en virgule flottante (codage IEEE).

Ce codage IEEE est utilisé par quasiment tous les langages de programmation.



Avant de d'aller plus loin, précisons immédiatement qu'il y a une solution
très simple pour ne pas perdre de décimales: il suffit d'utiliser le type
monétaire qui est parfaitement précis.



L'imprécision du codage binaire concerne les chiffres à droite de la
virgule. En effet en codage binaire, chaque 1 à droite de la virgule est une
fraction de deux: 1/2, 1/4, 1/8, 1/16, etc.



Certains nombres sont faciles à coder: par exemple 0.75 en décimal s'écrit
0.11 en binaire (1/4 + 1/2) (bien entendu, une machine ne connait au final
que le binaire !). En revanche, 0.8 est impossible à obtenir en additionnant
des fractions de 2. Si on choisit de s'arrêter à 10 chiffres après la
virgule, 0.8 en décimal s'écrira 0.1100110011 en binaire, soit 1/2 + 1/4 +
1/32 + 1/64 + 1/1024 + 1/2048. Mais il y reste encore beaucoup d'autres
chiffres après ces 10 décimales pour arriver "exactement" à 0.8. La valeur
est tronquée, d'où l'absence de précision.



--
Ed en Ligne


"Eric L." <aze@qsd.com> a écrit dans le message de news:
42ce6b63$1@news.pcsoft.fr...


pour ce genre de traitement, en windev, il vaut mieux éviter les réels et
utiliser
des monétaires...

et d'une manière générale, si r1 et r2 sont des réels,
on ne fait teste pas r1 = r2
mais abs(r1 - r2) <= valtest
avec valtest est un réel "assez" petit du genre 0.00001...

c'est ainsi que "marchent" les réels dans tous langages...

voilà, bon courage ;)

"Tchavi" <xavier.laurent@cerp-bn.com> a écrit dans le message de news:
42ce61cc$1@news.pcsoft.fr...



J'ai trouvé et je poste pour si quelq'un tombe sur le pb:


En fait il vaut mieu utiliser une variable chaîne et la comparer au
numérique de la table grâce à ~=.

Contre toute logique ça marche.