Précédent   Forum du club des développeurs et IT Pro > Bases de données > Autres SGBD > SQLite
SQLite Forum d'entraide SQLite
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/12/2012, 05h13   #1
morkitu
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2012
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : Boutique - Magasin

Informations forums :
Inscription : juillet 2012
Messages : 11
Points : 4
Points : 4
Par défaut select sum = résultat étrange

Bonjour!

J'ai une application vb.net qui exploite une petite base de donnée SQLITEv3.

L'une de mes tables contient une liste de prix. Une requête select me donne ceci:

PRIX
-18.4
-131.66
98.77
-25
-50
-754
0.62
-48.11
43.44
-54.5
538.07
-23.05
-67.28
-78.4
-4.36
-21.37
509.48
-98.77
-40
-24.95
-9.18
-103.49
-19.1
-14.95
-23.4
-47.5
-68
-0.02
-40
478.84
-25.64
-0.05
-50
503.76
-50
-50
-231.8

Si j'en fais la somme à la main, j'arrive a zéro... Mais en faisant un select sum(prix) SQLITE me retourne 5.6843418860808e-14 !!!

Je ne comprend pas pourquoi, j'ai essayé avec une colonne REAL, MONEY et FLOAT, j'ai toujours le même résultat.

Quelqu'un peut m'aider?

Merci
morkitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 09h11   #2
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 936
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 936
Points : 11 922
Points : 11 922
Ce sont les "limites" des nombres en virgule flottante.
Utilise un type DECIMAL ou NUMBER s'ils sont disponibles avec SQlite
__________________
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 09h21   #3
seabs
Membre chevronné
 
Inscription : janvier 2009
Messages : 401
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2009
Messages : 401
Points : 645
Points : 645
Bonjour,

Citation:
Si j'en fais la somme à la main, j'arrive a zéro... Mais en faisant un select sum(prix) SQLITE me retourne 5.6843418860808e-14 !!!

Je ne comprend pas pourquoi, j'ai essayé avec une colonne REAL, MONEY et FLOAT, j'ai toujours le même résultat.
Tu pourrais nous présenter ta requête complète. Je pense qu'il faut écrire
Code :
SELECT CAST(SUM(prix) AS DECIMAL(10,2)) AS Ecart FROM NomTable
Tu peux faire également
Code :
SELECT CAST(SUM(prix) * 100.0 AS INTEGER) / 100.0 AS Ecart FROM NomTable
Je n'ai pas testé, mais l'idée est là.

A+
seabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 14h54   #4
morkitu
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2012
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : Boutique - Magasin

Informations forums :
Inscription : juillet 2012
Messages : 11
Points : 4
Points : 4
Bonjour,

Merci pour vos réponses, ma requête est simplement:

Code :
SELECT sum(prix) FROM compta
J'ai créé des tables TEMP avec des colonnes REAL et FLOAT. J'avais aussi essayé DECIMAL. Ma méthode de transfert était la suivante:

Code :
1
2
3
INSERT INTO temp
SELECT * 
FROM compta
Je me demande si cette méthode est efficace, les données sont bien copiées mais j'ai l'impression que SQLITE conserve le type d'origine.

Je vais essayer avec le CAST tantôt et reviens avec les résultats.

merci.
morkitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 18h56   #5
morkitu
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2012
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : Boutique - Magasin

Informations forums :
Inscription : juillet 2012
Messages : 11
Points : 4
Points : 4
J'ai eu le même résultat avec la première option:

Code :
SELECT CAST(SUM(prix) AS DECIMAL(10,2)) AS Ecart FROM COMPTA
Mais je suis arriver au bon résultat avec la deuxième:

Code :
SELECT CAST(SUM(prix) * 100.0 AS INTEGER) / 100.0 AS Ecart FROM COMPTA
Merci beaucoup!
morkitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h53.


 
 
 
 
Partenaires

Hébergement Web