Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2011, 23h54   #1
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 258
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 258
Points : 26
Points : 26
Par défaut SqlServer2000 et le Float !

Salut

je travaille avec SqlServer2000, et j'utilise Type de donnée Float, mais il me pose de probleme!

Par exemple j'insère : 0.58

et si je fait l'appel avec Select, le 0.58 s'affiche ==> 0.579999999999996
ou bien 0.03 ==> 2.9999999999999E-2

Franchement sa me perturbe

Est-ce que le fait d'avoir utilisé le type Float que j'ai ce probleme, Si Oui. y'a t'il pas autre type qui pourra m'aider a évité ça ?!

Merci d'avance
info3licen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 13h33   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
OUI : DECIMAL et NUMERIC.
Il est normal que le float soit imprécis, car tout réel encodé en base deux ne peut pas représenter exactement un nombre décimal.
Exemple 0,2 est une somme infinie de puissance inverses de 2... Or l'infini sur un PC, c'est 32 (bits) !

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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 13h35   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Regardez ce sujet

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 16h22   #4
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 258
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 258
Points : 26
Points : 26
Merci pour vos réponse

J'ai éssai de faire ce que vous m'avez proposé comme solution, c a dire j'ai changé la type de ma colonne en DECIMAL et même en Numerique, mais sa ma pas trop aidé :
Si j'insère 0.25 il devient 0
ces deux type m'ont éliminé les chiffre après la virgule, et sa ne réponds pas a ce que je cherche

Merci
info3licen est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/06/2011, 18h37   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
qu'avez vous mis comme décimal?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 20h46   #6
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 258
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 258
Points : 26
Points : 26
Citation:
qu'avez vous mis comme décimal?
Decimal, pourquoi y a plusieurs type de Decimal?!
Moi sur mon SqlServer je retrouve un seul Decimal !

Merci
info3licen est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/06/2011, 22h02   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
On rajoute deux paramètres au type DECIMAL :
Code :
SELECT cast(0.25 AS decimal(5,2))
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 22h12   #8
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 258
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 258
Points : 26
Points : 26
Merci Waldar

Ben pour le moment j'utilise la fonction que vous venez de l'indiqué, Mais j'ai aurais aimé réglé ce probleme au niveau de mes table, je pensais qu'il existe un certain type de données sur SqlServer qui règle ce probleme, Mais je vois qu'apparemment sa n'existe pas !!!

Un type de données : quand on fait un entré un "0.25" il reste un "0.25"

Merci
info3licen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 23h16   #9
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je viens de vous le donner. DECIMAL(5,2).
Vous avez aussi le droit de chercher dans la documentation.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 04h27   #10
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par info3licen Voir le message
Ben pour le moment j'utilise la fonction que vous venez de l'indiqué, Mais j'ai aurais aimé réglé ce probleme au niveau de mes table, je pensais qu'il existe un certain type de données sur SqlServer qui règle ce probleme, Mais je vois qu'apparemment sa n'existe pas !!!
Ce que Waldar vous a indiqué est un type non une fonction.
Ça serait bien si vous faisiez un minimum d'effort pour comprendre ce que vous faites.
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 18h13   #11
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 258
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 258
Points : 26
Points : 26
Merci pour toutes vos réponse

j'ai gardé mes colonnes Float et j'utilise :

Code :
SELECT cast(0.25 AS decimal(5,2))
Pour l'affichage .

Merci bien
info3licen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 06h42   #12
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Ben non ... il vaut mieux changer vos colonnes au types decimal(5,2) :

Code :
1
2
ALTER TABLE dbo.maTable
ALTER COLUMN maColonneFloat decimal(5,2) [NOT NULL]
Le [NOT NULL] est éventuel, c'est à vous de savoir s'il y est ou non.
Je ne sais pas si la conversion vous posera des problèmes d'arrondis.

Dès lors toute requête s'écrit :

Code :
1
2
SELECT maColonne
FROM dbo.maTable
Sans transtypage !

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h43.


 
 
 
 
Partenaires

Hébergement Web