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

SQL Oracle Discussion :

Division entière avec TRUNC


Sujet :

SQL Oracle

  1. #1
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut Division entière avec TRUNC
    Bonsoir,
    Je souhaiterais savoir qu'est ce qui n'allait pas lorsque j'utilise TRUNC.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    q := TRUNC((volumeCommande-maxEspace)/volumeUnite),0);
    Apparemment il y a un problème au niveau de la virgule mais je ne vois pas lequel.
    Sinon connaissez-vous un autre moyen de récupérer la division entière de 2 float (autre procedure, cast,....)
    Merci

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Ouais... j'adore ce jeu... alors faut trouver l'erreur ou le problème que tu as c'est ça ?

  3. #3
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Non, en fait comme je l'ai dis plus haut je cherche à récupérer la division entière de 2 float.
    J'ai trouvé la procédure TRUNC mais lorsque je fais "show errors" on me signale un problème au niveau de la virgule entre les deux paramètre.
    Donc je voulais savoir si c'était bien comme cela que s'utilisait TRUNC.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Serait-ce trop demander que de vouloir voir le message complet ?

    Note que soit y'a un ",0" en trop soit un TRUNC à la place de ROUND

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par juve1897 Voir le message
    Apparemment il y a un problème au niveau de la virgule mais je ne vois pas lequel.
    Sinon connaissez-vous un autre moyen de récupérer la division entière de 2 float (autre procedure, cast,....)
    Merci
    tu as essayé d'enlever la virgule ? parceque si mes souvenirs sont exacts,il n'y a pas de ",0" dans la procedure TRUNC..

  6. #6
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    OK, je vais recommencer, désolé si je me suis mal exprimé.
    Tout d'abord je souhaite récupérer la partie entière d'une division entre 2 float.
    J'ai donc fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    q := TRUNC((volumeCommande-maxEspace)/volumeUnite),0);
    q étant un INTEGER et les autres variables des NUMBER(7,3).
    Mais ça ne marche pas, voilà le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PLS-00103: Encountered the symbol "," when expecting one of the
             following:
             . ( * % & = - + ; < / > at in is mod remainder not rem
             <an exponent (**)> <> or != or ~= >= <= <> and or like LIKE2_
             LIKE4_ LIKEC_ between || multiset member SUBMULTISET_
    Donc je suppose que j'ai mal utilisé TRUNC et je souhaiterais savoir comment corriger mon erreur, ou si il y avait une autre manière de récupérer la partie entière d'un float.
    Voilà, est-ce plus clair?

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est + clair en effet

    Donc soit tu supprimes le ",0" soit tu remplaces TRUNC par ROUND

  8. #8
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    D'après ce que j'ai lu, TRUNC s'utilise de la manière suivante:
    n étant le NUMBER que l'on veut tronquer, et m le nombre de décimal.
    En l'occurrence je souhaite zéro décimal, donc TRUNC(f,0).

  9. #9
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Citation Envoyé par orafrance Voir le message
    c'est + clair en effet

    Donc soit tu supprimes le ",0" soit tu remplaces TRUNC par ROUND
    L'usage est :
    Si c'est comme cela que ça s'utilise, j'ai essayé et j'ai toujours le même message erreur.

    De plus ROUND ne sert-elle pas uniquement aux dates?
    Peut importe, je n'arrive toujours pas à récupérer la partie entière d'une division flottante.

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    non, ROUND c'est pour les nombre et TRUNC éventuellement pour les dates. Si avec ROUND t'as encore un message sur la virgule c'est qu'il y a une erreur de syntaxe par ailleurs, un problème de parenthésage ou de quote mal fermés par exemple

    Edit : il y a bien un problème de parenthése

  11. #11
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par orafrance Voir le message
    non, ROUND c'est pour les nombre et TRUNC éventuellement pour les dates.
    C'était parti un peu trop vite.

    Il y a un TRUNC (number function) et un TRUNC (date function).
    Et plus important encore le TRUNC et le ROUND ne donnent pas les mêmes résultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL> Select round(1.0/1.5), trunc(1.0/1.5) from dual
      2  ;
     
    ROUND(1.0/1.5) TRUNC(1.0/1.5)
    -------------- --------------
                 1              0

  12. #12
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    en 9i, ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TRUNC(1/3,3)
    FROM dual
     
    TRUNC(1/3,3)
    0,333
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  13. #13
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Et TOUT ça pour ça ????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    q := TRUNC(
    			(volumeCommande-maxEspace)
    			/
    			volumeUnite
    		)
    		,0);

    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  14. #14
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par McM Voir le message
    en 9i, ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TRUNC(1/3,3)
    FROM dual
     
    TRUNC(1/3,3)
    0,333
    Et donc 0,333 est supposé à être "la partie entière d'une division entre 2 float"

  15. #15
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    non, TRUNC(n,m) donne m xhiffre derrière la virgule et donc si m=0 tu auras la partie entière de n

    en l'occurence, dans le cas présent c'est un bête problème de syntaxe avec un membre qui doit créer une discussion pour qu'on compte les parenthéses à sa place

+ 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. [Sparc V8] Reste division entière
    Par oli_carbo dans le forum Autres architectures
    Réponses: 1
    Dernier message: 24/10/2006, 16h09
  3. une "division flottante" avec javascript
    Par maniaco_jazz dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/12/2005, 11h32
  4. Génération de lignes entières avec TEXT_IO.PUT
    Par ludo.guy dans le forum Oracle
    Réponses: 9
    Dernier message: 13/10/2004, 15h28
  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