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 :

Problème opérateur division entière (\) [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut Problème opérateur division entière (\)
    Bonjour à tous,

    Dans une requête Access je calcule l'age de vendeurs en fonction d'une date de naissance
    j'utilise l'expression

    Age : (Date()-[naisvend])\365,25

    et je me suis rendu compte que c'est faux pour l'un des vendeurs

    pourtant avec

    Age : Int((Date()-[naisvend])/365,25)

    c'est bon^^

    Ci-joint une copie d'écran pour vous montrer le cas sur mes valeurs
    Vous avez déjà observé ça ? c'est un bug connu ?

    Merci de m'avoir lu
    Images attachées Images attachées  

  2. #2
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Bonjour.

    Ce n'est pas un bug, c'est juste la conséquence de l'arrondi automatique. Alors que la fonction Int tronque le résultat en gardant seulement la partie entière. D'où 49 dans le premier cas (48,96 arrondi à 49) et 48 dans le deuxième cas. Il y a moyen de calculer le résultat d'une différence de dates en années-mois-jour pour que ce soit exact dans tous les cas, mais en général la fonction la plus pratique pour calculer un intervalle entre deux dates est DiffDate(). Si ça peut t'être utile, voir cette discussion

    Cordialement
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  3. #3
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour Robi,

    Merci de m'avoir répondu

    Arrondi automatique sur une division entière ??? je ne comprends pas
    comment expliques-tu que Kother Fabienne (plus bas) n'ait pas 36 mais 35 en résultat s'il y a un arrondi ?

  4. #4
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Autant pour moi! Pas fait gaffe au slash dans ta formule! Je n'ai pas de réponse par rapport à cela, sinon que la division par 365,25 ne donnera un âge correct que dans un certain nombre de cas(la grand majorité, certes), parce que c'est une simple opération arithmétique qui ne tient pas compte du nombre exact d'années bissextiles compris entre les deux dates et de certains cas particuliers. Mais bien sûr, le 49 n'est sans doute pas dû à un arrondi!
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  5. #5
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonsoir,

    Je déterre mon vieux sujet

    Après quelques tests, l'opérateur division entière est fortement déconseillé avec des nombres décimaux
    il commence par arrondir les nombre décimaux de chaque côté de l'opérateur au plus proche
    puis il fait la division entière^^

    bref

    équivaut à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int(Round([champ2];0)/Round([champ1];0))

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    En fait, cela dépend de ce que l’on souhaite comme résultat.

    Quotient standard : [Operande1]/[Operande2]

    Resultat long Q.S. : CLong([Operande1]/[Operande2]) => quotient entier arrondi

    Partie entière Q.S. : Ent([Operande1]/[Operande2]) => quotient entier tronqué

    Quotient division entière : [Operande1]\[Operande2] => qui revient à faire ce que tu dis (division des opérandes arrondis)

    Quotient des parties entières : Ent([Operande1])/Ent([Operande2]) => division des 2 opérandes tronqués

    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

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

Discussions similaires

  1. ACCESS SQL : division entière ?
    Par kikidrome dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/10/2014, 09h12
  2. Problème de Division
    Par Dlyan dans le forum C++
    Réponses: 5
    Dernier message: 09/03/2006, 15h24
  3. problème de division par 100
    Par trent94 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/11/2005, 22h08
  4. [CR8.5] Problème de division par zéro sur formule
    Par franck.cvitrans dans le forum Formules
    Réponses: 3
    Dernier message: 10/06/2004, 13h41
  5. Division entière et Modulo
    Par kase74 dans le forum SQL
    Réponses: 6
    Dernier message: 01/04/2004, 11h46

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