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 Firebird Discussion :

Procédure stockée renvoyant un % sans décimales...


Sujet :

SQL Firebird

  1. #1
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut Procédure stockée renvoyant un % sans décimales...
    Bonjour à tous,
    j'utilise Interbase 7.5 et je teste une procédure stockée sous IBExpert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE PROCEDURE POURCENTAGE_SI_TOTALT 
    RETURNS (POURCENTAGE DECIMAL(3,2))
    AS
    BEGIN
    POURCENTAGE = (4 * 100) / 23;
    END
    Sous IBexpert, elle me renvoie 17 (sans décimales)

    tandis que cette version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE PROCEDURE POURCENTAGE_SI_TOTALT 
    RETURNS (POURCENTAGE DECIMAL(3,2))
    AS
    BEGIN
    POURCENTAGE = (4 / 0.01) / 23;
    END
    me renvoie 17.39... ce que je veux.

    quelqu'un aurait-il une explication ??

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2005
    Messages : 64
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    Réalisé sous FB 1.5.3, non testé sur IB7.5 mais il ne doit pas y avoir de soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE POURCENTAGE_SI_TOTALT 
    RETURNS (
        POURCENTAGE INTEGER)
    AS
    BEGIN
    POURCENTAGE = cast((4 * 100) / 23 as Integer);
    Suspend;
    END
    Arfany

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2005
    Messages : 64
    Points : 90
    Points
    90
    Par défaut
    Oups, lu trop vite

    Par contre tu peux essayé ceci pour tracer sous IbExpert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE PROCEDURE POURCENTAGE_SI_TOTALT 
    RETURNS (
        DB DOUBLE PRECISION,
        TEST DECIMAL (3, 2),
        POURCENTAGE INTEGER)
    AS
    BEGIN
    Db=(4 *100) / 23;
    Test=Cast(Db as DECIMAL (3, 2));
    POURCENTAGE = cast(Db as Integer);
    Suspend;
    END
    Désolé !

    Arfany

  4. #4
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    merci de ta réponse;

    ta procédure me renvoie : 17.000 - 17.00 - 17
    alors qu'elle devrait me renvoyer : 17.390 - 17.39 - 17

    d'ailleurs elle me renvoie bien ces résultats si dans le calcul je force les décimales comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Db=(4.00 *100) / 23;
    ou comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Db=(4 *100.00) / 23;
    au delà de ceci, j'utilise les composants DBexpress pour me connecter à la base, et un composant TSQLStoredProc pour éxécuter cette Procédure stockée, et je rencontre le même problème de décimales...
    à savoir que même si dans IBExpert j'obtiens les bonnes décimales (en rajoutant ".00"), dans mon application, en utilisant le SQLStoredProc, mon résultat est toujours arrondi... ?! (j'obtiens dans ce cas 17...)

    Merci d'avance si qqun peut m'éclairer.

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    il faut savoir que toutes valeurs sans décimales et une valeur "integer" et que le résultat des opérations et toujours un entier...

    pour contourner cela, quelques exemples:
    1) cast( 4 as double precision ) * cast( 100 as double precision ) / cast( 23 as double precision ) ==> 17.3913043478
    2) cast( 4 as double precision ) * 100 / 23
    3) 4 * 100 / cast( 23 as double precision )

    en fait, il est important qu'une des valeurs soit en "double precision" pour que le résultat le soit (en principe)

    maintenant, il faut aussi faire attention au programme client qui peut procéder à des arrondis "sauvages" voir à ce sujet le "man" de ces applications.

  6. #6
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    Merci pour ces infos,

    pour ce qui est de la couche cliente, j'ai partiellement résolu mon problème en utilisant un SQLQuery, avec une une instruction du type "Select * from MaProcedureStockee", j'obtiens le résultat au bon format.

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

Discussions similaires

  1. Procédure stockée renvoyant 2 jeux de données
    Par Kropernic dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/02/2013, 13h56
  2. Réponses: 26
    Dernier message: 24/06/2009, 09h32
  3. Tester une procédure stockée renvoyant un curseur
    Par david71 dans le forum PL/SQL
    Réponses: 14
    Dernier message: 26/08/2008, 12h50
  4. procédure stockée , renvoyer 0 si null?
    Par erox44 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2008, 14h48
  5. Réponses: 6
    Dernier message: 18/05/2005, 14h04

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