51 votes

Division d'entiers dans le serveur SQL

Dans Microsoft SQL Server 2005, pourquoi les commandes suivantes produisent-elles des résultats entiers ?

 SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6

63voto

Mike M. Points 5408

Dans le premier, vous obtenez le résultat de deux entiers, puis vous convertissez le résultat en DECIMAL (9,2). Dans la seconde, vous divisez simplement deux nombres entiers et c'est normal.

Si vous convertissez l'un des nombres entiers en nombre décimal AVANT de faire la division, vous obtiendrez un résultat décimal.

 SELECT 151/CAST(6 AS DECIMAL (9,2))

36voto

SQLMenace Points 68670

Oui c'est un comportement standard

faire

 SELECT 151/6.0

ou

 SELECT 151/(CONVERT(DECIMAL(9,2),6))

ou

 SELECT 151/(6 * 1.0)

11voto

Oded Points 271275

Parce que 151 et 6 sont des entiers et que vous effectuez une division entière, même avant le casting.

Vous devez vous assurer qu'au moins un des arguments est de type flottant :

 SELECT 151.0/6

Ou

 SELECT 151/6.0

3voto

Sham Sunder Points 72

Vous devez également donner un espace réservé pour les décimales

Exemple

 SELECT 151.000000/6
OR
SELECT 151/6.000000

Les deux produiront

25.16666666

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X