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

Access Discussion :

Partie entière de 6 égale à 5 !


Sujet :

Access

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Partie entière de 6 égale à 5 !
    Bonjour à tous,

    Voici l'énoncé du sujet :
    Dans une table, j'ai 3 champs numériques, entiers longs NCE, NCP et NCC. Comme valeurs, j'ai NCE=360 NCP=150 et NCC=10.

    Dans une première requête je fais les calculs suivants :
    NP:[NCE]/[NCP] soit 2,4
    NPE:Ent([NP]) donc 2 (jusque là tout se passe bien...)
    RP:[NP]-[NPE] la partie décimale, donc, soit 0,4
    NC: [RP]*[NCP]/[NCC] donc 0,4 * 150 / 10 qui donne 6

    Dans une seconde requête, basée sur la première :
    NCE: Ent([NC]) et ça donne 5 !! Pas mal, non ??

    Par contre, si je pars d'une table avec RP en réel double et 0,4 en valeur, et le reste inchangé, avec une requête dont les calculs sont identiques :
    NC: [RP]*[NCP]/[NCC] toujours à 6
    NCE: Ent([NC]) donne 6, cette fois ci.

    Quelqu'un comprend-il quelque chose à ce phénomène pour le moins bizzarre ?
    C'est à douter des Maths, cette affaire...

    Merci par avance pour vos lumières...

    Patrick

  2. #2
    Membre régulier Avatar de Sonic
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Points : 96
    Points
    96
    Par défaut
    C'est un problème de perte de précisions dû à l'utilisation de vigule flotante. Ton calcul 0.4*150/10 donne en fait 5,9999999... (à quelque chose près). Le problème c'est que Int(5.999) donne bien 5, essaye plutot un Round(0.4*150/10)

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci de ta proposition d'utiliser Round. J'ai cru un moment que ça marchait.
    Avec les valeurs données ça donne bien 6, en effet, mais j'ai d'autres valeurs pour lesquelles j'ai besoin de la partie entière aussi, 6,666667 par exemple, et, là, évidemment ça donne 7...

    Juste pour ma culture générale, comment tu fais pour savoir que 0,4 *150 / 10 donne 5,999999 ?

    A part ça, en fouinant, j'ai trouvé quelque chose qui semble fonctionner, d'autant que je n'ai pas de nombres négatifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function pe(x)
     
    dim texte as string
    dim partieentieretexte as string
     
    texte = x (je récupère mon nombre dans une variable chaîne)
     
    partieentieretexte = Split(texte,",")(0) (je prends à gauche de la virgule)
    pe = CInt(partieentieretexte) (je convertis en integer)
     
    end function
    Qu'en penses tu ?
    merci en tout cas

    Patrick

  4. #4
    Membre régulier Avatar de Sonic
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Points : 96
    Points
    96
    Par défaut
    Oui ca fonctionne, je me sers également d'une conversion en chaîne de caractères dans une de mes requetes mais j'avais pas osé te le proposer, ca fait pas super propre quand même dans certain cas y a pas plus simple

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Dans la première requête essaie :

    NP:CCur([NCE]/[NCP]) soit 2,4
    NPE:Ent([NP]) donc 2 (jusque là tout se passe bien...)
    RP:CCur([NP]-[NPE]) la partie décimale, donc, soit 0,4
    NC: CCur([RP]*[NCP]/[NCC]) donc 0,4 * 150 / 10 qui donne 6

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci Sonic,

    C'est vrai que la méthode n'est sans doute pas très orthodoxe, mais, en attendant, ça fonctionne, et c'est l'essentiel, n'est-ce pas ?

    Merci Tofalu pour ta proposition d'utiliser Ccur, mais ça ne change rien : Si je demande la partie entière de NC dans la 2nde requête, j'ai toujours 5...

    Bonne continuation, et à une prochaine fois,

    Patrick

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/02/2014, 17h14
  2. [TSplitter] 3 parties...
    Par agh dans le forum Delphi
    Réponses: 3
    Dernier message: 07/09/2006, 13h11
  3. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38
  4. selectionner une partie d'un TImage
    Par bidochon dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/02/2003, 19h08
  5. Réponses: 3
    Dernier message: 09/02/2003, 01h09

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