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

Requêtes et SQL. Discussion :

Ajout de décimales non désirées lors d'une requête de MAJ


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Technicienne en géomatique
    Inscrit en
    Octobre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicienne en géomatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 38
    Points : 41
    Points
    41
    Par défaut Ajout de décimales non désirées lors d'une requête de MAJ
    Bonjour!

    Voici mon problème, que je détaillerai par la suite :
    Lorsque je soustrait 2 champs dans une requête, pour certains enregistrements, Access ajoute une longue suite de décimales alors que mes données n'en comporte que 2.


    J'ai deux champs, distance_originale (rep_desc_dist_ori) et distance_actuelle (rep_dist_dist), dont le type de données est Numérique, réel double, 2 décimales. Les distances sont en mètres, et je souhaite avoir une précision au cm.

    Et notez que j'ai appliqué aucun format à mes données.

    À la base, certaines données possédaient plusieurs décimales. Avant de modifier le type pour forcer les 2 décimales (réel, décimale auto), je leur ai appliqué une requête de mise à jour pour les arrondir. Voici mes 2 requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ds_reperes_desc SET ds_reperes_desc.rep_desc_dist_ori = Round([ds_reperes_desc]![rep_desc_dist_ori],2);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ds_reperes_dist SET ds_reperes_dist.rep_dist_dist = Round([ds_reperes_dist]![rep_dist_dist],2);
    Je souhaite soustraire l'un de l'autre afin d'obtenir le déplacement.

    Par contre, comme vous pouvez voir sur les images, certains déplacements comportent une longue suite de décimales, et je ne sais pas d'où ça vient.

    Par la suite, je dois classifier ces déplacements, ce qui fait que pour même valeur "arrondie", le déplacement sera classé dans une classe ou l'autre, selon les décimales.

    Pouvez-vous m'aider à éliminer toutes décimales non désirées?

    Merci beaucoup!

    Marie!

    Nom : 2018-02-22_105004.jpg
Affichages : 397
Taille : 36,5 Ko

    Nom : 2018-02-22_111138.jpg
Affichages : 481
Taille : 96,5 Ko

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Si tu souhaites un résultat à 2 décimales, il faut aussi arrondir le résultat du calcul.

    Les décimales supplémentaires viennent de comment un ordinateur code les nombres réels en interne.
    Les rééls sont un ensemble infini de valeurs mais la mémoire d'un ordinateur n'est pas infinie.
    Donc, il stoke en réalité une très bonne approximation de la valeur mais ce n'est pas forcément la valeur.

    De plus mathématiquement un nombre suivi d'une infinité de neufs, c'est même chose que l'entier suivant.

    Attention les problèmes d'arrondis sont une plaie car si tu fais la somme des éléements arrondis, tu n'arrives pas forcément au total arrondi calculé par Access. Tu peux avoir des écarts sur la 2ième décimale.

    Une parade serait d'utiliser des nombres monétaires (4 décimales) quoi qu'il y ai apparement un problème quand on applique le format.
    http://donnedwards.openaccess.co.za/...-year-old.html

    Sinon, tu peux aussi travailler avec des entiers (en multipliant ton chiffre par 100) et n'afficher la décimale qu'à l'écran ... c'est assez pénible si tu as de la saisie à faire.

    Et finalement tu peux utiliser des champs texte et progarmmer toi-même les fonctions de calculs, chiffre à chiffre ... c'est faisable mais assez long.

    A+

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonsoir

    Une Function qui pourrait peut-être te sortir d'affaire, à mettre dans un Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Arrondi(ByVal NDouble As Double, NDéc As Integer)
        Arrondi=CSng(Left(Round(CStr(NDouble), NDéc), InStr(1, CStr(NDouble), ",") + NDéc))
    End Function
    que tu peux utiliser en VBA ou dans les requêtes (Créer/Fonctions/Base.../Module.../Arrondi) avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Arrondi(NombreàArrondir, NbreDécimales)
    Nota : si le nombre n'a aucune décimale au départ (ex : 123), il n'en n'aura pas à l'arrivée. Il suffit de mettre le Format voulu pour la présentation sur les formulaires, états...

    Titi95

Discussions similaires

  1. [2008R2] Trigger non exécuté lors d'une requête INSERT
    Par Invité dans le forum Développement
    Réponses: 2
    Dernier message: 05/01/2017, 17h50
  2. Réponses: 11
    Dernier message: 17/01/2008, 18h53
  3. Attraper message d'erreur lors d'une requête d'ajout
    Par steps5ive dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/12/2006, 16h53
  4. Réponses: 2
    Dernier message: 27/07/2006, 22h59
  5. Erreur lors d'une requête d'ajout
    Par olivia.of dans le forum Access
    Réponses: 13
    Dernier message: 14/02/2006, 12h18

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