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

MS SQL Server Discussion :

[sqlserver2k8 ]différence de somme


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 .

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

    @++

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    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 Images attachées  
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 733
    Billets dans le blog
    8
    Par défaut
    A propos du lien
    Suivant

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

    A+

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

Discussions similaires

  1. [XL-2007] Différence de somme de quantités en VBA
    Par Hajoorita dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/12/2014, 12h17
  2. Différence entre la somme de ma procédure et de la requête
    Par MightyDucks dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 21/09/2011, 11h42
  3. instruction différence de somme de valeur
    Par antalata dans le forum Oracle
    Réponses: 5
    Dernier message: 07/09/2010, 12h45
  4. Somme d'une différence
    Par Lolie11 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 11/02/2009, 19h24
  5. Calcul d'une différence de sommes dans une requête
    Par oohcalme dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 07/07/2008, 11h56

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