|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : mai 2005 Messages : 398 ![]() |
Bonjour,
Je début sous Postgre J'ai créé un champ rarete de type double precision alter table releves add column rarete double precision j'ai mis à jour cette table avec uen donnée de pourcentage mais la valeur retournée ne comporte pas de chiffres après la virgule. ai-je choisi le bon type de données? |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
bonjour,
cf la doc http://www.postgresql.org/docs/9.1/s...e-numeric.html double precision c'est 15 decimal. Maintenant avez-vous besoin de 15 décimales ? Un numeric(2,X) où X est le nombre maximal souhaité, serai plus adéquate. |
|
|
00
|
|
|
#3 | ||
|
Membre confirmé
![]() Inscription : mai 2005 Messages : 398 ![]() |
si double precision permet d'afficher 15 décimales, pourquoi ne m'en affiche t il aucune?
j'ai créé une colonne de type numeric(2,2) pour 2 décimales (y a-t-il une écriture plus simple, d'ailleurs) Code :
ALTER TABLE releves ADD COLUMN rarete numeric(2,2) Code :
UPDATE releves SET rarete4 = 100 -(100*nbmaillestaxon/nbmaillesdep) Code :
Désolé pour ces questions qui peuvent paraître évidentes pour les utilisateurs avancés. |
||
|
|
00
|
|
|
#4 | |||||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
Alors en fait là pgsql va interpréter votre demande assez ...spécialement. Essyer ceci : => 0 et maintenant : => 0.07054673721340388007 que c'est-il passé ? dans le 1er cas il va caster votre résultat comme un integer. Dans le 2eme cas, vu que l'on a mit ".0" il va caster le résultat comme un numeric. Donc soit vous forcez la caste manuellement avec "CAST(mon_nombre as numeric)" soit vous rajoutez ".0". Ensuite n'oubliez pas de round votre résultat sinon il y a des chances qu'il tronque tout simplement (je n'ai pas testé, donc à vérifier). Ce qui nous donne au final : Code :
Citation:
Par contre vous pouvez créer un domain qui sera de type numeric(2, 2), et ce domain sera ré-utilisable de partout dans votre schéma. Code :
Code :
|
|||||||
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : mai 2005 Messages : 398 ![]() |
merci beaucoup pour toutes ces informations. c'est nickel!
j'en apprends, des choses, d'un seul coup |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Si vous ne voulez pas de décimale, pourquoi ne pas travailler avec les types entiers INT ( =/ - 2 milliards) ou BIGINT (+/-2^63) ???
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 291 ![]() |
Citation:
numeric(2,2) ne permet pas de stocker des nombres de 0.00 à 1.00 mais de 0.00 à 0.99 : 100% (1.00) ne peut pas être exprimé dans ce format. maintenant si ce que vous voulez stocker ce sont des % [0.; 100.0] avec une précision de 2 décimales c'est numeric(5,2) que vous devez utiliser, éventuellement avec une contrainte "check(rarete >= 0.0 and rarete <= 100.0)". (ou utiliser un autre format numérique que "numeric(precision, scale)" …) |
|
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Franck TheetenInscription : mars 2005 Messages : 33 ![]() |
Le casting peut être aussi utilisé sous cette forme plus courte pour forcer la précision vers les décimales.
Code :
INSERT INTO test_precision (valeur) VALUES (15/100::double precision ); L'avantage est que la valeur entrée par l'utilisateur n'est pas altérée et que le CAST n'est indiqué qu'une seule fois pour toute l'expression. Utile si un script effectue l'insertion. C'est vrai que ce n'est un comportement pas très consistant, PostgreSQL pourrait caster par défaut en écriture dans le type du champs... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com