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

  1. #1
    Membre habitué
    Homme Profil pro
    Responsable associatif
    Inscrit en
    octobre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : octobre 2005
    Messages : 186
    Points : 136
    Points
    136
    Par défaut [FB 3] Choisir le bon type de champs pour les montants en euros
    Bonjour à tous,

    je transfère actuellement des données venant de tables dBase vers une BDD Firebird.
    Quel type de champ faut-il choisir pour les montants en euros, pour ne pas avoir de problème d'arrondi par la suite ?

    J'ai vu pas mal de posts à ce sujet, mais ils sont assez anciens et plutôt confus (pour moi).
    Alors ? décimal, numeric ou float ?
    Merci de me faire profiter de votre expérience !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    8 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 647
    Points : 28 665
    Points
    28 665
    Par défaut
    Evite le type float qui risque de t'apporter des problèmes d'arrondi.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 483
    Points : 33 674
    Points
    33 674
    Billets dans le blog
    42
    Par défaut
    Bonjour,

    j'éviterai Float

    DECIMAL(18,2) me semble le meilleur choix
    bien que si l'on connait le nombre maximum de chiffre NUMERIC puisse être utilisé

    Citation Envoyé par https://firebirdsql.org/manual/migration-mssql-data-types.html
    Une différence subtile dans la façon dont NUMERIC et DECIMAL se comportent dans Firebird est que la définition NUMERIC signifie exactement la précision demandée (nombre total de chiffres), tandis que DECIMAL signifie au moins la précision de la demande (les chiffres à droite du symbole décimal, cependant, sont conservés exactement)
    Quoiqu'il en soit un calcul contenant des décimales fournira une valeur avec le nombre total de décimales : exemple
    MONTANT DECIMAL(18,2)
    COURS DECIMAL(8,6)


    MONTANT*COURS -> DECIMAL (18,8)
    Donc il faudra quand même avoir le recours à l'arrondi ROUND(MONTANT*COURS) et un casting au besoin


    pour comprendre testez ce SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CAST(24.50 AS DECIMAL(18,2)),CAST(1.065635 AS DECIMAL(18,6)),
    CAST(24.50 AS DECIMAL(18,2))*CAST(1.065635 AS DECIMAL(18,6)),
    ROUND(CAST(24.50 AS DECIMAL(18,2))*CAST(1.065635 AS DECIMAL(18,6)),2),
    CAST(ROUND(CAST(24.50 AS DECIMAL(18,2))*CAST(1.065635 AS DECIMAL(18,6)),2) AS DECIMAL(18,2)) 
    FROM RDB$DATABASE
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  4. #4
    Membre habitué
    Homme Profil pro
    Responsable associatif
    Inscrit en
    octobre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : octobre 2005
    Messages : 186
    Points : 136
    Points
    136
    Par défaut
    Parfait, merci !

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

Discussions similaires

  1. Choisir le bon type de "collection"
    Par bedomon dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 06/07/2013, 14h06
  2. Choisir le bon type de projet
    Par lpouilly dans le forum Visual C++
    Réponses: 3
    Dernier message: 14/11/2011, 20h17
  3. PROC GLM : choisir le bon type SS en SAS?
    Par ganod dans le forum SAS STAT
    Réponses: 1
    Dernier message: 12/10/2009, 22h08
  4. Choisir le bon type de jointure LEFT ou INNER?
    Par cmako dans le forum Développement
    Réponses: 9
    Dernier message: 08/10/2009, 12h54
  5. Quel type de champs pour les case a cocher
    Par leroidje dans le forum Autres
    Réponses: 1
    Dernier message: 15/02/2008, 14h54

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