IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

bug de transtypage dans Windev ? [WD18]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 76
    Points
    76
    Par défaut bug de transtypage dans Windev ?
    Bonjour,

    Alors c'est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nPeukert est un entier sans signe sur 1 octet
    nPeukert=100*Val("1.15")
    Trace(nPeukert)
    j'obtiens 114 au lieu de 115 !

    dans une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nPeukert est un entier sans signe sur 1 octet
    FOR i=0 TO 255
    	nPeukert=100*Val(NumériqueVersChaîne(i/100))//nPeukert=100*Val("1.15")
    	Trace(i+" "+nPeukert)
    END
    Plusieurs valeurs dont 57,57, 114, 230 ne donnent pas la bonne valeur.

    Est-ce une grossière erreur de ma part ou un pb Windev ?

    merci de vos lumières

    Gilbert.
    Merci de votre aide.
    Gilbert.

  2. #2
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Bonjour,

    Val va renvoyer un réel, qui est un type binaire.
    1.15 n'existant pas en notation binaire finie, le réel contient une approximation (du genre 1.149999...).
    Multiplié par 100, ça donne 114.9999...
    Le cast d'un réel vers un entier fait une troncation, ce qui donne 114.

    Ca peut paraître étrange, car tous les entiers jusqu'à 2^53 sont représentés exactement dans un réel, mais, manque de bol, on n'est pas tombé assez près.

    Vous pouvez faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nPeukert = 0m100 * Val("1.15")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nPeukert = Arrondi(100 * Val("1.15"))
    Dommage que :
    - Le type Val ne renvoie pas un "numérique" (type décimal)
    - Le type numérique est buggé de toute façon (cf. ce sujet)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 76
    Points
    76
    Par défaut merci bcp
    Merci bcp cher Hibernatus !
    Merci de votre aide.
    Gilbert.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nPeukert est un entier sans signe sur 1 octet
    nPeukert=100*Val("1.15")
    Trace(nPeukert)

    à remplacer par :
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nPeukert est une chaîne
    nPeukert=100*Val("1.15")
    Trace(nPeukert)

    Résultat : il semblerait que le type chaine soit le type le plus certain en wlangage, ça me fait penser que j'avais rencontré des anomalies en utilisant des variables de type de date (à l'époque où j'étais sous webdev 15), en passant par le type chaine, tout se passe à merveille.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur d'import d'une base Access dans WinDev
    Par freebsnet dans le forum Access
    Réponses: 3
    Dernier message: 21/02/2007, 09h40
  2. [Bug] Événement OnDestroy dans fenêtre dynamique
    Par gregcat dans le forum Delphi
    Réponses: 8
    Dernier message: 05/02/2007, 16h04
  3. [bug aléatoire] sauvegarde dans un fichier
    Par poukill dans le forum C++
    Réponses: 11
    Dernier message: 30/05/2006, 08h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo