1 - Je travaille avec des nombres petits qui sont déclarées comme reel
dans le code. de tant en temps, Windev me les met en notation
scientifique. C'est a dire que si je regarde ma variable sous le
debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je
fais alors par exemple a*b et que a=5 et b=8e-02, et bien j'ai une
erreur de syntaxe.
2 - Problème beaucoup plus grave et qui se produit de facon aleatoire.
Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs
sont renseignés dans une table de saisie avec comme masque 999 999.99
on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans
le fichier et rappelé pour traitement voici ce que j'ai de temps en
temps (Une fois toutes les 200 ajouts dans le fichier)
Lc.Qte1 est egale à 178.5
Lc.Qte1L est egal à 178.5
Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
Mieux !
Lc.Qte1*1000000 donne 178500000
Lc.Qte1L*1000000 donne 178500000
Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
Je rappelle que ces champs sont saisies dans une table avec 2
decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou
vinnent ces decimales !!!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jacques.trepp
Philippe MOUNIER a pensé très fort :
Je rencontre 2 phénomènes tres etrange :
1 - Je travaille avec des nombres petits qui sont déclarées comme reel dans le code. de tant en temps, Windev me les met en notation scientifique. C'est a dire que si je regarde ma variable sous le debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une erreur de syntaxe.
2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs sont renseignés dans une table de saisie avec comme masque 999 999.99 on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans le fichier et rappelé pour traitement voici ce que j'ai de temps en temps (Une fois toutes les 200 ajouts dans le fichier)
Lc.Qte1 est egale à 178.5 Lc.Qte1L est egal à 178.5 Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
Mieux !
Lc.Qte1*1000000 donne 178500000 Lc.Qte1L*1000000 donne 178500000
Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
Je rappelle que ces champs sont saisies dans une table avec 2 decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou vinnent ces decimales !!!
Une idée, car je vais mal finir avec mon client.
Merci
c'est un problème recurrent avec les réels. Il faut utiliser des monétaires :/ ou bien utiliser des arrondis. cordialement
-- Ceci est une signature automatique de MesNews. Site : http://mesnews.no-ip.com
Philippe MOUNIER a pensé très fort :
Je rencontre 2 phénomènes tres etrange :
1 - Je travaille avec des nombres petits qui sont déclarées comme reel
dans le code. de tant en temps, Windev me les met en notation
scientifique. C'est a dire que si je regarde ma variable sous le
debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je
fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une
erreur de syntaxe.
2 - Problème beaucoup plus grave et qui se produit de facon aleatoire.
Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs
sont renseignés dans une table de saisie avec comme masque 999 999.99
on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans
le fichier et rappelé pour traitement voici ce que j'ai de temps en
temps (Une fois toutes les 200 ajouts dans le fichier)
Lc.Qte1 est egale à 178.5
Lc.Qte1L est egal à 178.5
Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
Mieux !
Lc.Qte1*1000000 donne 178500000
Lc.Qte1L*1000000 donne 178500000
Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
Je rappelle que ces champs sont saisies dans une table avec 2
decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou
vinnent ces decimales !!!
Une idée, car je vais mal finir avec mon client.
Merci
c'est un problème recurrent avec les réels. Il faut utiliser des
monétaires :/
ou bien utiliser des arrondis.
cordialement
--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
1 - Je travaille avec des nombres petits qui sont déclarées comme reel dans le code. de tant en temps, Windev me les met en notation scientifique. C'est a dire que si je regarde ma variable sous le debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une erreur de syntaxe.
2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs sont renseignés dans une table de saisie avec comme masque 999 999.99 on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans le fichier et rappelé pour traitement voici ce que j'ai de temps en temps (Une fois toutes les 200 ajouts dans le fichier)
Lc.Qte1 est egale à 178.5 Lc.Qte1L est egal à 178.5 Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
Mieux !
Lc.Qte1*1000000 donne 178500000 Lc.Qte1L*1000000 donne 178500000
Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
Je rappelle que ces champs sont saisies dans une table avec 2 decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou vinnent ces decimales !!!
Une idée, car je vais mal finir avec mon client.
Merci
c'est un problème recurrent avec les réels. Il faut utiliser des monétaires :/ ou bien utiliser des arrondis. cordialement
-- Ceci est une signature automatique de MesNews. Site : http://mesnews.no-ip.com
DAIREAUX Jean-Baptiste
"Philippe MOUNIER" a écrit dans le message de news:
Je rencontre 2 phénomènes tres etrange :
1 - Je travaille avec des nombres petits qui sont déclarées comme reel dans le code. de tant en temps, Windev me les met en notation scientifique. C'est a dire que si je regarde ma variable sous le debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une erreur de syntaxe.
2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs sont renseignés dans une table de saisie avec comme masque 999 999.99 on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans le fichier et rappelé pour traitement voici ce que j'ai de temps en temps (Une fois toutes les 200 ajouts dans le fichier)
Lc.Qte1 est egale à 178.5 Lc.Qte1L est egal à 178.5 Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
Mieux !
Lc.Qte1*1000000 donne 178500000 Lc.Qte1L*1000000 donne 178500000
Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
Je rappelle que ces champs sont saisies dans une table avec 2 decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou vinnent ces decimales !!!
Une idée, car je vais mal finir avec mon client.
Merci
A savoir : avec des réel -> a=x b=x a-b = ?? -> 0 plus ou moins k avec k petit.
donc si a-b=0 alors n'arrive jammais sinon arrive toujour fin
faire si abs(a-b)<=k alors info("a=b") sinon info("a<>b") fin
ce n'est pas du a windev mais à la réprésentation des réel en machine.
J.B.D.
"Philippe MOUNIER" <pmoune@wanadoo.fr> a écrit dans le message de
news:5f7fe859.0410200808.59eb84a5@posting.google.com...
Je rencontre 2 phénomènes tres etrange :
1 - Je travaille avec des nombres petits qui sont déclarées comme reel
dans le code. de tant en temps, Windev me les met en notation
scientifique. C'est a dire que si je regarde ma variable sous le
debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je
fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une
erreur de syntaxe.
2 - Problème beaucoup plus grave et qui se produit de facon aleatoire.
Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs
sont renseignés dans une table de saisie avec comme masque 999 999.99
on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans
le fichier et rappelé pour traitement voici ce que j'ai de temps en
temps (Une fois toutes les 200 ajouts dans le fichier)
Lc.Qte1 est egale à 178.5
Lc.Qte1L est egal à 178.5
Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
Mieux !
Lc.Qte1*1000000 donne 178500000
Lc.Qte1L*1000000 donne 178500000
Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
Je rappelle que ces champs sont saisies dans une table avec 2
decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou
vinnent ces decimales !!!
Une idée, car je vais mal finir avec mon client.
Merci
A savoir :
avec des réel ->
a=x
b=x
a-b = ?? -> 0 plus ou moins k avec k petit.
donc
si a-b=0 alors
n'arrive jammais
sinon
arrive toujour
fin
faire
si abs(a-b)<=k alors
info("a=b")
sinon
info("a<>b")
fin
ce n'est pas du a windev mais à la réprésentation des réel en machine.
"Philippe MOUNIER" a écrit dans le message de news:
Je rencontre 2 phénomènes tres etrange :
1 - Je travaille avec des nombres petits qui sont déclarées comme reel dans le code. de tant en temps, Windev me les met en notation scientifique. C'est a dire que si je regarde ma variable sous le debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une erreur de syntaxe.
2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs sont renseignés dans une table de saisie avec comme masque 999 999.99 on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans le fichier et rappelé pour traitement voici ce que j'ai de temps en temps (Une fois toutes les 200 ajouts dans le fichier)
Lc.Qte1 est egale à 178.5 Lc.Qte1L est egal à 178.5 Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
Mieux !
Lc.Qte1*1000000 donne 178500000 Lc.Qte1L*1000000 donne 178500000
Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
Je rappelle que ces champs sont saisies dans une table avec 2 decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou vinnent ces decimales !!!
Une idée, car je vais mal finir avec mon client.
Merci
A savoir : avec des réel -> a=x b=x a-b = ?? -> 0 plus ou moins k avec k petit.
donc si a-b=0 alors n'arrive jammais sinon arrive toujour fin
faire si abs(a-b)<=k alors info("a=b") sinon info("a<>b") fin
ce n'est pas du a windev mais à la réprésentation des réel en machine.
J.B.D.
pmoune
Merci pour le tuyau je n'avais jamais rencontré ce comportement. Mais par contre je dois donner quoi comme valeur à k sachant que mes clients sont libres de choisir le nombre de décimales avec lesquelles ils désirent travailler.
Merci de ta réponse
Phil
"DAIREAUX Jean-Baptiste" wrote in message news:<4176939a$0$28798$...
"Philippe MOUNIER" a écrit dans le message de news: > Je rencontre 2 phénomènes tres etrange : > > 1 - Je travaille avec des nombres petits qui sont déclarées comme reel > dans le code. de tant en temps, Windev me les met en notation > scientifique. C'est a dire que si je regarde ma variable sous le > debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je > fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une > erreur de syntaxe. > > 2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. > Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs > sont renseignés dans une table de saisie avec comme masque 999 999.99 > on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans > le fichier et rappelé pour traitement voici ce que j'ai de temps en > temps (Une fois toutes les 200 ajouts dans le fichier) > > Lc.Qte1 est egale à 178.5 > Lc.Qte1L est egal à 178.5 > Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0 > > Mieux ! > > Lc.Qte1*1000000 donne 178500000 > Lc.Qte1L*1000000 donne 178500000 > > Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!. > > Je rappelle que ces champs sont saisies dans une table avec 2 > decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou > vinnent ces decimales !!! > > Une idée, car je vais mal finir avec mon client. > > Merci
A savoir : avec des réel -> a=x b=x a-b = ?? -> 0 plus ou moins k avec k petit.
donc si a-b=0 alors n'arrive jammais sinon arrive toujour fin
faire si abs(a-b)<=k alors info("a=b") sinon info("a<>b") fin
ce n'est pas du a windev mais à la réprésentation des réel en machine.
J.B.D.
Merci pour le tuyau je n'avais jamais rencontré ce comportement. Mais
par contre je dois donner quoi comme valeur à k sachant que mes
clients sont libres de choisir le nombre de décimales avec lesquelles
ils désirent travailler.
Merci de ta réponse
Phil
"DAIREAUX Jean-Baptiste" <pasdespam.jbdaireaux@llexell.fr.nospam> wrote in message news:<4176939a$0$28798$8fcfb975@news.wanadoo.fr>...
"Philippe MOUNIER" <pmoune@wanadoo.fr> a écrit dans le message de
news:5f7fe859.0410200808.59eb84a5@posting.google.com...
> Je rencontre 2 phénomènes tres etrange :
>
> 1 - Je travaille avec des nombres petits qui sont déclarées comme reel
> dans le code. de tant en temps, Windev me les met en notation
> scientifique. C'est a dire que si je regarde ma variable sous le
> debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je
> fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une
> erreur de syntaxe.
>
> 2 - Problème beaucoup plus grave et qui se produit de facon aleatoire.
> Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs
> sont renseignés dans une table de saisie avec comme masque 999 999.99
> on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans
> le fichier et rappelé pour traitement voici ce que j'ai de temps en
> temps (Une fois toutes les 200 ajouts dans le fichier)
>
> Lc.Qte1 est egale à 178.5
> Lc.Qte1L est egal à 178.5
> Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
>
> Mieux !
>
> Lc.Qte1*1000000 donne 178500000
> Lc.Qte1L*1000000 donne 178500000
>
> Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
>
> Je rappelle que ces champs sont saisies dans une table avec 2
> decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou
> vinnent ces decimales !!!
>
> Une idée, car je vais mal finir avec mon client.
>
> Merci
A savoir :
avec des réel ->
a=x
b=x
a-b = ?? -> 0 plus ou moins k avec k petit.
donc
si a-b=0 alors
n'arrive jammais
sinon
arrive toujour
fin
faire
si abs(a-b)<=k alors
info("a=b")
sinon
info("a<>b")
fin
ce n'est pas du a windev mais à la réprésentation des réel en machine.
Merci pour le tuyau je n'avais jamais rencontré ce comportement. Mais par contre je dois donner quoi comme valeur à k sachant que mes clients sont libres de choisir le nombre de décimales avec lesquelles ils désirent travailler.
Merci de ta réponse
Phil
"DAIREAUX Jean-Baptiste" wrote in message news:<4176939a$0$28798$...
"Philippe MOUNIER" a écrit dans le message de news: > Je rencontre 2 phénomènes tres etrange : > > 1 - Je travaille avec des nombres petits qui sont déclarées comme reel > dans le code. de tant en temps, Windev me les met en notation > scientifique. C'est a dire que si je regarde ma variable sous le > debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je > fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une > erreur de syntaxe. > > 2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. > Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs > sont renseignés dans une table de saisie avec comme masque 999 999.99 > on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans > le fichier et rappelé pour traitement voici ce que j'ai de temps en > temps (Une fois toutes les 200 ajouts dans le fichier) > > Lc.Qte1 est egale à 178.5 > Lc.Qte1L est egal à 178.5 > Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0 > > Mieux ! > > Lc.Qte1*1000000 donne 178500000 > Lc.Qte1L*1000000 donne 178500000 > > Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!. > > Je rappelle que ces champs sont saisies dans une table avec 2 > decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou > vinnent ces decimales !!! > > Une idée, car je vais mal finir avec mon client. > > Merci
A savoir : avec des réel -> a=x b=x a-b = ?? -> 0 plus ou moins k avec k petit.
donc si a-b=0 alors n'arrive jammais sinon arrive toujour fin
faire si abs(a-b)<=k alors info("a=b") sinon info("a<>b") fin
ce n'est pas du a windev mais à la réprésentation des réel en machine.
J.B.D.
DAIREAUX Jean-Baptiste
k doit étre égale à la précision que tu désire par exemple : précision 4 décimales k=0.0001
petite erreur dans le code que je t'ai donné : si abs(a-b)<k alors //stricte avec le k egal la précision info("a=b") sinon info("a<>b") fin
Par contre pour gérer des valeur motétaire utilise le monétaire de windev qui un entier avec une partie décimal fixe.
"Philippe MOUNIER" a écrit dans le message de news:
Merci pour le tuyau je n'avais jamais rencontré ce comportement. Mais par contre je dois donner quoi comme valeur à k sachant que mes clients sont libres de choisir le nombre de décimales avec lesquelles ils désirent travailler.
Merci de ta réponse
Phil
"DAIREAUX Jean-Baptiste" wrote in
message news:<4176939a$0$28798$...
> "Philippe MOUNIER" a écrit dans le message de > news: > > Je rencontre 2 phénomènes tres etrange : > > > > 1 - Je travaille avec des nombres petits qui sont déclarées comme reel > > dans le code. de tant en temps, Windev me les met en notation > > scientifique. C'est a dire que si je regarde ma variable sous le > > debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je > > fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une > > erreur de syntaxe. > > > > 2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. > > Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs > > sont renseignés dans une table de saisie avec comme masque 999 999.99 > > on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans > > le fichier et rappelé pour traitement voici ce que j'ai de temps en > > temps (Une fois toutes les 200 ajouts dans le fichier) > > > > Lc.Qte1 est egale à 178.5 > > Lc.Qte1L est egal à 178.5 > > Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0 > > > > Mieux ! > > > > Lc.Qte1*1000000 donne 178500000 > > Lc.Qte1L*1000000 donne 178500000 > > > > Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!. > > > > Je rappelle que ces champs sont saisies dans une table avec 2 > > decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou > > vinnent ces decimales !!! > > > > Une idée, car je vais mal finir avec mon client. > > > > Merci > > A savoir : > avec des réel -> > a=x > b=x > a-b = ?? -> 0 plus ou moins k avec k petit. > > donc > si a-b=0 alors > n'arrive jammais > sinon > arrive toujour > fin > > faire > si abs(a-b)<=k alors > info("a=b") > sinon > info("a<>b") > fin > > ce n'est pas du a windev mais à la réprésentation des réel en machine. > > J.B.D.
k doit étre égale à la précision que tu désire par exemple :
précision 4 décimales k=0.0001
petite erreur dans le code que je t'ai donné :
si abs(a-b)<k alors //stricte avec le k egal la précision
info("a=b")
sinon
info("a<>b")
fin
Par contre pour gérer des valeur motétaire utilise le monétaire de windev
qui un entier avec une partie décimal fixe.
"Philippe MOUNIER" <pmoune@wanadoo.fr> a écrit dans le message de
news:5f7fe859.0410201426.4c3d9591@posting.google.com...
Merci pour le tuyau je n'avais jamais rencontré ce comportement. Mais
par contre je dois donner quoi comme valeur à k sachant que mes
clients sont libres de choisir le nombre de décimales avec lesquelles
ils désirent travailler.
Merci de ta réponse
Phil
"DAIREAUX Jean-Baptiste" <pasdespam.jbdaireaux@llexell.fr.nospam> wrote in
> "Philippe MOUNIER" <pmoune@wanadoo.fr> a écrit dans le message de
> news:5f7fe859.0410200808.59eb84a5@posting.google.com...
> > Je rencontre 2 phénomènes tres etrange :
> >
> > 1 - Je travaille avec des nombres petits qui sont déclarées comme reel
> > dans le code. de tant en temps, Windev me les met en notation
> > scientifique. C'est a dire que si je regarde ma variable sous le
> > debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je
> > fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une
> > erreur de syntaxe.
> >
> > 2 - Problème beaucoup plus grave et qui se produit de facon aleatoire.
> > Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs
> > sont renseignés dans une table de saisie avec comme masque 999 999.99
> > on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans
> > le fichier et rappelé pour traitement voici ce que j'ai de temps en
> > temps (Une fois toutes les 200 ajouts dans le fichier)
> >
> > Lc.Qte1 est egale à 178.5
> > Lc.Qte1L est egal à 178.5
> > Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0
> >
> > Mieux !
> >
> > Lc.Qte1*1000000 donne 178500000
> > Lc.Qte1L*1000000 donne 178500000
> >
> > Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!.
> >
> > Je rappelle que ces champs sont saisies dans une table avec 2
> > decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou
> > vinnent ces decimales !!!
> >
> > Une idée, car je vais mal finir avec mon client.
> >
> > Merci
>
> A savoir :
> avec des réel ->
> a=x
> b=x
> a-b = ?? -> 0 plus ou moins k avec k petit.
>
> donc
> si a-b=0 alors
> n'arrive jammais
> sinon
> arrive toujour
> fin
>
> faire
> si abs(a-b)<=k alors
> info("a=b")
> sinon
> info("a<>b")
> fin
>
> ce n'est pas du a windev mais à la réprésentation des réel en machine.
>
> J.B.D.
k doit étre égale à la précision que tu désire par exemple : précision 4 décimales k=0.0001
petite erreur dans le code que je t'ai donné : si abs(a-b)<k alors //stricte avec le k egal la précision info("a=b") sinon info("a<>b") fin
Par contre pour gérer des valeur motétaire utilise le monétaire de windev qui un entier avec une partie décimal fixe.
"Philippe MOUNIER" a écrit dans le message de news:
Merci pour le tuyau je n'avais jamais rencontré ce comportement. Mais par contre je dois donner quoi comme valeur à k sachant que mes clients sont libres de choisir le nombre de décimales avec lesquelles ils désirent travailler.
Merci de ta réponse
Phil
"DAIREAUX Jean-Baptiste" wrote in
message news:<4176939a$0$28798$...
> "Philippe MOUNIER" a écrit dans le message de > news: > > Je rencontre 2 phénomènes tres etrange : > > > > 1 - Je travaille avec des nombres petits qui sont déclarées comme reel > > dans le code. de tant en temps, Windev me les met en notation > > scientifique. C'est a dire que si je regarde ma variable sous le > > debogeur, elle ne s'affiche pas comme 0.008 mais comme 8e-02. si je > > fais alors par exemple a*b et que a=5 et b-02, et bien j'ai une > > erreur de syntaxe. > > > > 2 - Problème beaucoup plus grave et qui se produit de facon aleatoire. > > Soit dans un fichier 2 champs reels. Lc.Qte et Lc.QteL ces deux champs > > sont renseignés dans une table de saisie avec comme masque 999 999.99 > > on ne peut donc pas saisir plus de 2 decimales. une fois stocké dans > > le fichier et rappelé pour traitement voici ce que j'ai de temps en > > temps (Une fois toutes les 200 ajouts dans le fichier) > > > > Lc.Qte1 est egale à 178.5 > > Lc.Qte1L est egal à 178.5 > > Lc.Qte1-Lc.Qte1L donne 125e-05 et pas 0 > > > > Mieux ! > > > > Lc.Qte1*1000000 donne 178500000 > > Lc.Qte1L*1000000 donne 178500000 > > > > Lc.Qte1*1000000-Lc.Qte1L*1000000 donne 0.125 !!!!!. > > > > Je rappelle que ces champs sont saisies dans une table avec 2 > > decimales et ne sont pas issus d'un calcul genre HT vers TTC. D'ou > > vinnent ces decimales !!! > > > > Une idée, car je vais mal finir avec mon client. > > > > Merci > > A savoir : > avec des réel -> > a=x > b=x > a-b = ?? -> 0 plus ou moins k avec k petit. > > donc > si a-b=0 alors > n'arrive jammais > sinon > arrive toujour > fin > > faire > si abs(a-b)<=k alors > info("a=b") > sinon > info("a<>b") > fin > > ce n'est pas du a windev mais à la réprésentation des réel en machine. > > J.B.D.