91 votes

SQL Server, la division renvoie zéro

Voici le code que j'utilise dans l'exemple :

 PRINT @set1
 PRINT @set2

 SET @weight= @set1 / @set2;
 PRINT @weight

Voici le résultat :

47
638
0

J'aimerais savoir pourquoi il revient. 0 au lieu de 0,073667712

0 votes

C'est un 'int' : DECLARE @weight INT

1voto

Suat Atan Points 54

Dans SQL Server, la division directe de deux entiers renvoie un entier même si le résultat devrait être un flottant. Il y a un exemple ci-dessous pour le faire comprendre :

--1--
declare @weird_number_float float
set @weird_number_float=22/7
select @weird_number_float

--2--
declare @weird_number_decimal decimal(18,10)
set @weird_number_decimal=22/7 
select @weird_number_decimal

--3--
declare @weird_number_numeric numeric
set @weird_number_numeric=22/7 
select @weird_number_numeric

--Right way

declare @weird_number float
set @weird_number=cast(22 as float)/cast(7 as float)
select @weird_number

Le dernier bloc renverra 3,14285714285714. Malgré le deuxième bloc défini avec la bonne précision, le résultat sera 3.00000.

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