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 :

Erreur d'affectation sur une variable numérique. [WD18]


Sujet :

WinDev

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2012
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 162
    Points : 308
    Points
    308
    Par défaut Erreur d'affectation sur une variable numérique.
    Bonjour à tous,

    Je suis face à une erreur inédite qui survient lors de l'affectation sur une valeur numérique. Le cas constaté est le suivant:

    J'ai défini une classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CPaiement est une classe
    PUBLIC CONSTANT
      IDFacture est une chaine  
      SoldeLigne est un numérique(15,2)
      MontantLigne est un numérique(15,2)
    FIN
    Pour initialiser la classe, j'utilise une méthode "Initialise" en mode d'accès PUBLIC.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROCEDURE Inialise(LOCAL PIDFacture est une chaine, LOCAL PSoldeLigne est un numerique(15,2), LOCAL PMontantLigne est un numerique(15,2))
    :IDFacture = PIDFacture
    :SoldeLigne = PSoldeLigne
    :MontantLigne = PMontantLigne
    Je constate que lors de l'initialisation de la classe les paramètres "PIDFacture" et "PMontantLigne" sont correctement affectés par contre pour le paramètre "PSoldeLigne" ce n'est pas le cas (à titre d'exemple je lui passe 229,21 et je me retrouve avec une valeur de 141 278 361 841 298, 24 sans être capable d'expliquer l'origine de cela).
    Plus troublant encore, tout fonctionne en mode débogage. Mais dès que je génère l'exécutable l'erreur arrive systématiquement. C'est d'autant plus embêtant que c'est un module qui marchait bien depuis plus 1 an que je n'ai pas eu à faire des modifications dessus depuis lors.
    J'ai beau réparer et recompiler le projet. Rien à faire, l'erreur est toujours là.

    Je remercie d'avance ceux qui pourront m'apporter un éclairage sur la situation.

    Cordialement.

  2. #2
    Membre averti

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2010
    Messages : 125
    Points : 399
    Points
    399
    Par défaut
    Pour faire simple : (dixit la doc WinDev : Type Numerique)

    Affectation d'un numérique
    Lors de l'affectation d'un numérique par une valeur (valeur directement saisie, fournie par une fonction, ...), cette valeur est automatiquement convertie en réel par le compilateur.Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    num1 est un numérique
    num1 = 1234567890123456789123456789
    Trace(num1) // num1 ne contient pas la bonne valeur
    
    
    
    num2 est un numérique
    num2 = 1234567890123456789.0
    Trace(num2) // num2 ne contient pas la bonne valeur
    
    Pour forcer l'affectation d'un numérique, utilisez 0n devant la valeur. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    num1 est un numérique
    num1 = 0n1234567890123456789123456789
    Trace(num1) // num1 contient la bonne valeur
    
    
    num2 est un numérique
    num2 = 0n1234567890123456789.0
    Trace(num2) // num2 contient la bonne valeur
    

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2012
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 162
    Points : 308
    Points
    308
    Par défaut
    Merci pour la réponse lolo84.
    Dans l'exemple Windev sur les numériques, que j'ai consulté aussi, il s'agit de l'affectation en dur d'une valeur numérique. Donc je ne pense pas cela soit le problème car je passe les valeurs par un paramètre (déjà formaté numérique(15,2)) qui est ensuite affecté à la variable de traitement (aussi formaté en numérique(15,2)). Ce qui me surprend, c'est qu'une notion aussi basique que l'affectation se plante à ce point.

    Par ailleurs, je n'ai aucun problème pour les autres variables uniquement celle-là.
    En plus, je peux comprendre que la valeur 229,01 devienne 229,00000000000000199 mais de là à 141 278 361 841 298, 24, il y a un monde que je ne peux saisir. Comme je l'ai dit, c'est une solution qui marchait depuis plus un an sans problème.

    Cordialement.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2012
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 162
    Points : 308
    Points
    308
    Par défaut
    Bonjour,
    Je viens de recevoir une réponse du Service technique en réponse au problème qui dit en substance ceci:

    Si la valeur erronée n'apparaît qu'avec l'exécutable, il pourrait y avoir un lien avec la technologie JITc.

    Avez-vous le bon résultat en ajoutant:
    [WD_EXECUTION]
    OPTIM_EXECUTION=0

    Dans le WIN.INI et/ou le fichier .WX de l'exécutable (cf. http://doc.pcsoft.fr/fr-FR/?2020009)?
    Effectivement, je n'ai plus de problème après cette modification.

    Cordialement.

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

Discussions similaires

  1. [XL-2007] erreur de déclaration sur une variable globale
    Par romca dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/08/2010, 20h22
  2. Réponses: 2
    Dernier message: 04/12/2009, 14h34
  3. [E-03] Affecter le contenu d'une textbox à une variable numérique
    Par Sclarck1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 08/11/2008, 16h01
  4. Réponses: 2
    Dernier message: 23/01/2008, 22h10
  5. erreur d'affectation d'une variable
    Par Myth_Titans dans le forum C++
    Réponses: 3
    Dernier message: 05/07/2006, 21h51

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