SQL Server toujours donner un résultat entier quand on divise deux entiers.
Vous pouvez ajouter un ".0" à la fin des valeurs réelles codées en dur, ou multiplier par "1.0" pour convertir une valeur de champ. Si vous voulez arrondir, alors la meilleure façon que je connaisse est d'ajouter 0,5, puis appelez la fonction RONDE normale. Cela fonctionne parce que ROUND_DOWN (nombre + .5) est toujours le même que ROUND_UP (nombre).
Vous pouvez également lancer un champ manuellement sur un flotteur, comme d'autres l'ont indiqué.
Mais notez que
round(1.0/2.0,0)
renverra un résultat virgule flottante, alors que
round(cast(1 as float)/cast(2 as float),0)
donnera un entier résultat. Alors, utilisez celui qui vous convient le mieux.
Tous ces éléments sont illustrés dans l'exemple ci-dessous:
SELECT
ROUND(5/2,0) AS INTEGER_EXAMPLE
,ROUND((5.0/2.0),0) AS FLOATING_POINT_EXAMPLE
,ROUND(CAST(5 AS FLOAT)/CAST(2 AS FLOAT),0) AS CASTING_EXAMPLE
,ROUND((5 * 1.0)/(2 * 1.0),0) AS CONVERTED_TO_FP_EXAMPLE
,ROUND(((1 * 1.0)/(4 * 1.0)) + (1.0/2.0),0) AS ROUNDED_UP_EXAMPLE
Voici une fonction qui fera pour vous rafles, avec un SELECT pour vous montrer les résultats qu'il donne.
create function roundup(@n float) returns float
as
begin
--Special case: if they give a whole number, just return it
if @n = ROUND(@n,0)
return @n;
--otherwise, add half and then round it down
declare @result float = @n;
declare @half float = (1.0/2.0);
set @result = round(@n + @half,0);
return @result;
end
select
dbo.roundup(0.0) as example_0
,dbo.roundup(0.3) as example_pt_three
,dbo.roundup(0.5) as example_pt_five
,dbo.roundup(0.9) as example_pt_nine
Merci! a bien fonctionné – Martin