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

 Firebird Discussion :

[FB 3] Choisir le bon type de champs pour les montants en euros


Sujet :

Firebird

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

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : octobre 2005
    Messages : 228
    Points : 162
    Points
    162
    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
    Retraité
    Inscrit en
    mai 2002
    Messages
    8 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2002
    Messages : 8 946
    Points : 29 902
    Points
    29 902
    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
    13 806
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 13 806
    Points : 37 102
    Points
    37 102
    Billets dans le blog
    56
    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
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    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
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : octobre 2005
    Messages : 228
    Points : 162
    Points
    162
    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, 13h06
  2. Choisir le bon type de projet
    Par lpouilly dans le forum Visual C++
    Réponses: 3
    Dernier message: 14/11/2011, 19h17
  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, 21h08
  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, 11h54
  5. Quel type de champs pour les case a cocher
    Par leroidje dans le forum Autres
    Réponses: 1
    Dernier message: 15/02/2008, 13h54

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