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
declara uma ou ambas as variáveis como float / double
lançar uma ou ambas as variáveis para float / double.
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.
Obrigado cara. Seu código me ajudou a responder a esta - stackoverflow.com/questions/20532187/… Você pode me dizer como truncar os zeros extras causados por essa multiplicação? Obrigado.
Trojan.ZBOT
2
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
Respostas:
Declare set1 e set2 como floats em vez de inteiros ou converta-os em floats como parte do cálculo:
SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
fonte
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.
fonte
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.
fonte
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
fonte
se você declará-lo como float ou qualquer formato decimal ele irá mostrar
só
Por exemplo :
declare @weight float; SET @weight= 47 / 638; PRINT @weight
Resultado: 0
Se você quiser a saída como
Por exemplo
declare @weight float; SET @weight= 47.000000000 / 638.000000000; PRINT @weight
fonte
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.
fonte