Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 16/07/2011, 14h55   #1
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
Par défaut [sqlserver2k8 ]différence de somme

Bonjour,

J'ai un problème dont je trouve pas d'explication ,
je calcule une somme en sql comme suit:
Code :
1
2
3
4
5
6
 
SELECT 0.139384138629511 + 
0.487389830266509 + 
0.343476077970488 + 
0.00000259421522959 + 
0.0297473589182614
j'obtiens 0.99999999999999899

Alors en excel avec les mêmes chiffres j'obtiens le total de 1.

Je dois avoir en sql un total de 1 pour que mon calcul soit juste en global.
Je dois prendre en sql le chiffre en totalité de ses chiffres après la virgule.
les valeurs en sql sont de type nvarchar je les converti en float pour mon calcul.

Je comprends pas ou est le problème pourquoi sql retourne 0.99999 et non pas 1, quel type de données à mettre.

Merci de m'aider .
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2011, 10h59   #2
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,

Citation:
les valeurs en sql sont de type nvarchar je les converti en float pour mon calcul.
D'une part les valeurs ne devraient pas être stockées en nvarchar pour deux raisons :
- ce type est conçu pour stocker des chaînes de caractères, et non pas des valeurs décimales
- le fait d'utiliser nvarchar utilise Unicode, ce qui fait que tout caractère utilise 2 octets.
Or comme les chiffres ne sont pas des caractères non-latins, il n'y a aucun intérêt à les stocker en Unicode.
Pour stocker une chaîne qui ne contiendra que des caractères de l'alphabet latin et/ou des chiffres, on utilise varchar, qui utilise ASCII et donc un seul octet par caractère.

D'autre part le type float n'est pas, comme son nom l'indique, un type de données précis, ce qui explique l'imprécision que vous obtenez.
Vous devez donc pour cela utiliser le type decimal :

Code :
1
2
3
4
5
6
7
DECLARE @a decimal(18,17) = 0.139384138629511
	, @b decimal(18,17) = 0.487389830266509
	, @c decimal(18,17) = 0.343476077970488
	, @d decimal(18,17) = 0.00000259421522959
	, @e decimal(18,17) = 0.0297473589182614
 
SELECT @a + @b + @c + @d + @e
Lisez le sujet suivant

Qui lui non plus de retourne pas 1 mais une valeur très proche de 1.
Je ne sais pas quel est le nombre d'octets qu'Excel utilise pour effectuer des calculs avec des nombres décimaux à large mantisse, mais ce ne doit pas être les 9 octets que j'utilise dans l'exemple.

@++
__________________
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 17/07/2011, 11h43   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
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 954
Points : 17 774
Points : 17 774
Excel ne trouve pas non plus 1 dans ce calcul, mais arrondit à 1 en fonction de la cosmétique que vous avez donné à ce champs, ce qui est plus pervers !!!!!!!
http://www.developpez.net/forums/att...1&d=1310895784
Bref, apprenez à vous servir d'Excel avant de mettre en doute SQL Server !

A +
Images attachées
Type de fichier : gif excel.gif (28,8 Ko, 5 affichages)
__________________
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 17/07/2011, 19h07   #4
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2003
Messages : 177
Points : 413
Points : 413
A propos du lien
Suivant

je viens d'y rajouter une couche ! et remercie elsuket pour ses investigations et contributions sur ce sujet.

A+
hmira 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 22h13.


 
 
 
 
Partenaires

Hébergement Web