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