Deux chiffre aprèla virgule

Messages postés
9
Date d'inscription
vendredi 14 janvier 2005
Statut
Membre
Dernière intervention
19 février 2005
- - Dernière réponse : cs_fabrice69
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
- 21 févr. 2005 à 11:29
Hello toujour pas trouvé une solution pour ma requete j'aimerais deux chiffres après la virgule.

Cordialement

select sum(compte) from (SELECT (COUNT (ID)*10) as compte FROM Users WHERE Name LIKE '%' AND ValidTill > #2005/01/01# AND ValidTill < #2005/12/31# AND TimeCredit LIKE '86%' UNION SELECT (COUNT(ID) * 4.50) as compte FROM Users WHERE Name LIKE '%' AND ValidTill > #2005/01/01# AND ValidTill < #2005/12/31# AND TimeCredit LIKE '36%' ))

on ma proposé cela mais sa ne fonctionne pas !!!
peut-être que je le place mal dans la requete?

select sum(compte) *1.076 from ...
Afficher la suite 

7 réponses

Messages postés
9
Date d'inscription
vendredi 14 janvier 2005
Statut
Membre
Dernière intervention
19 février 2005
0
Merci
Salut,

Non toujour pas
Commenter la réponse de spoque
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4
0
Merci
Il faut essayer la conversion en type decimal avec 2 chiffre après la virgule.
Le round fait un arrondi ce qui n'est sans doute pas ton besoin

Il faut donc essayer en un

CONVERT( Sum(xxxx), decimal(10,2))

Le 10 correspond au nombre max de chiffre avant la virgule
Le 2 est le nombre max de chiffres après la virgule.

Romelard Fabrice (Alias F___)
Commenter la réponse de cs_fabrice69
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4
0
Merci
Ci joint aide MSDN :

----

Conversion des données numériques et décimales

Pour les types de données decimal et numeric, Microsoft® SQL Server™ considère chaque combinaison de précision et d'échelle comme un type de données différent. Par exemple, decimal(5,5) et decimal(5,0) sont considérés comme des types de données différents.


Dans les instructions Transact-SQL, une constante avec une virgule est automatiquement convertie en valeur de donnée numeric, en utilisant la précision et l'échelle requise minimale. Par exemple, la constante 12,345 est convertie en valeur numeric avec une précision de 5 et une échelle de 3.


La conversion de decimal ou numeric en float ou real peut engendrer une certaine perte de précision. La conversion de int, smallint, tinyint, float, real, money ou smallmoney en decimal ou numeric peut provoquer un dépassement de capacité.


Par défaut, SQL Server utilise les arrondis lorsqu'il convertit un nombre en valeur decimal ou numeric avec une précision et une échelle plus faibles. Toutefois, si l'option SET ARITHABORT est sur ON, SQL Server déclenche une erreur lors du dépassement de capacité. Perdre uniquement la précision et l'échelle ne suffit pas à engendrer une erreur.

<!--RELATEDTOPICSLIST-->

----

Romelard Fabrice (Alias F___)
Commenter la réponse de cs_fabrice69
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4
0
Merci
Je retire ce que j'ai dit pour le premier chiffre, il s'agit de la précision voulue et non du nombre de chiffre avant la virgule (chuis fatigué moi ;) )
cf aide msdn :

----

Précision, échelle et longueur

La précision est le nombre de chiffres qui composent un nombre. L'échelle est le nombre de chiffres à droite du point décimal (notre virgule) dans un nombre. Par exemple, le nombre 123,45 a une précision de 5 et une échelle de 2.


La précision maximum par défaut des types de données numeric et decimal est 38. Dans les versions précédentes de SQL Server, la valeur maximum par défaut était de 28.


La longueur pour un type de données numérique est le nombre d'octets utilisés pour stocker le nombre. La longueur d'une chaîne de caractères ou d'un type de données Unicode est le nombre de caractères. La longueur des types de données binary, varbinary et image est le nombre d'octets. Par exemple, un type de données int peut contenir 10 chiffres, il est stocké sur 4 octets et il n'accepte pas le point décimal. Le type de données int a une précision de 10, une longueur de 4, et une échelle de 0.


Lors de la concaténation de deux expressions char, varchar, binary ou varbinary, la longueur de l'expression obtenue est la somme des longueurs des deux expressions sources ou 8000 caractères, en fonction de la valeur la moins élevée.


Lors de la concaténation de deux expressions de type nchar ou nvarchar, la longueur de l'expression obtenue est la somme des longueurs des deux expressions sources ou 4000 caractères, en fonction de la valeur la moins élevée.


La précision et l'échelle des types de données numériques à part decimal sont fixes. Si un opérateur arithmétique se rapporte à deux expressions du même type, le résultat est également du même type avec la précision et l'échelle définies pour ce type. Si un opérateur se rapporte à deux expressions de types de données numériques différents, les règles de priorité des types de données déterminent le type du résultat. Le résultat a la précision et l'échelle correspondant à son type de données.


Le tableau suivant détaille le calcul de la précision et de l'échelle du résultat d'une opération lorsque celui-ci est de type decimal. Le résultat est de type decimal si :

<LI>Les deux expressions sont de type decimal.


<LI>une expression est de type decimal et l'autre est d'un type de degré de priorité moins élevé. </LI>
Les opérandes sont notés e1 et e2 (expressions) avec respectivement, les précisions p1 et p2 et les échelles s1et s2. La précision et l'échelle d'une expression d'un autre type que decimal sont celles définies pour cet autre type.


Opération |
Précision du résultat |
Échelle du résultat * |
----

e1 + e2,
max(s1, s2) + max(p1-s1, p2-s2) + 1,
max(s1, s2),
----

e1 - e2,
max(s1, s2) + max(p1-s1, p2-s2),
max(s1, s2),
----

e1 * e2,
p1 + p2 + 1,
s1 + s2,
----

e1 / e2,
p1 - s1 + s2 + max(6, s1 + p2 + 1),
max(6, s1 + p2 + 1)


* La précision et l'échelle du résultat ne peuvent pas dépasser 38. Si la précision du résultat dépasse 38, l'échelle correspondante est diminuée pour empêcher la troncature de la partie intégrale du résultat.

<!--END-->----

Romelard Fabrice (Alias F___)
Commenter la réponse de cs_fabrice69
Messages postés
9
Date d'inscription
vendredi 14 janvier 2005
Statut
Membre
Dernière intervention
19 février 2005
0
Merci
Hello donc pour toi c'est cela?


(Select CONVERT( Sum(compte), decimal(10,2)) *1.076 from (SELECT (COUNT (ID)*10) as compte FROM Users WHERE Name LIKE '%' AND ValidTill > #2005/01/01# AND ValidTill < #2005/12/31# AND TimeCredit LIKE '86%' UNION SELECT (COUNT(ID) * 4.50) as compte FROM Users WHERE Name LIKE '%' AND ValidTill > #2005/01/01# AND ValidTill < #2005/12/31# AND TimeCredit LIKE '36%' ))

Désolé sa ne fonctionne toujour pas!!!

c'est peut-être à cause de sa?


while( odbc_fetch_row( $valeur ) ) //tant que c pas la fin de la table

{
echo odbc_result( $valeur, 1 )."&nbsp;.-Frs (HT)
";
}
odbc_close( $cnx); // ferme la connection
Commenter la réponse de spoque
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4
0
Merci
Il faut tester la requette dans Query Analyser avant de l'utiliser dans ton code.

Romelard Fabrice (Alias F___)
Commenter la réponse de cs_fabrice69
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012
-1
Merci
Essaye :



Select ROUND( sum(compte)
, 2)

++
Moustachu
Commenter la réponse de cs_moustachu