Aqui está o código que estou usando no exemplo:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
Aqui está o resultado:
47
638
0
Eu gostaria de saber por que está voltando em 0
vez de0,073667712
Respostas:
Quando você usa apenas inteiros em uma divisão, obterá uma divisão de inteiros. Quando você usa (pelo menos um) double ou float, você obterá uma divisão de ponto flutuante (e a resposta que deseja obter).
Então você pode
Não basta converter o resultado da divisão inteira para o dobro: a divisão já foi realizada como divisão inteira, portanto, os números atrás do decimal já foram perdidos.
Porque é um número inteiro. Você precisa declará-los como números de ponto flutuante ou decimais, ou convertê-los para tal no cálculo.
Simplesmente multiplique a parte inferior da divisão por 1,0 (ou quantas casas decimais você quiser)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
se você declará-lo como float ou qualquer formato decimal ele irá mostrar
0
só
Por exemplo :
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Resultado: 0
Se você quiser a saída como
0,073667712
Por exemplo
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
No SQL Server, a divisão direta de dois inteiros retorna um inteiro, mesmo se o resultado for o float. Há um exemplo abaixo para explicá-lo:
--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
Apenas o último bloco retornará o 3,14285714285714. Apesar do segundo bloco definido com a precisão correta, o resultado será 3.00000.