Aquí está el código que estoy usando en el ejemplo:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
Aquí está el resultado:
47
638
0
Me gustaría saber por qué está regresando en 0lugar de0,073667712
Respuestas:
Cuando usa solo números enteros en una división, obtendrá una división entera. Cuando use (al menos uno) double o float, obtendrá una división de punto flotante (y la respuesta que desea obtener).
Así que puedes
No se limite a convertir el resultado de la división de enteros al doble: la división ya se realizó como división de enteros, por lo que los números detrás del decimal ya se han perdido.
Porque es un número entero. Debe declararlos como números de punto flotante o decimales, o convertirlos en tales en el cálculo.
Simplemente divida la parte inferior de la división por 1.0 (o tantas posiciones decimales como desee)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
si lo declara como flotante o cualquier formato decimal, se mostrará
0
solamente
P.ej :
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Salida: 0
Si quieres la salida como
0.073667712
P.ej
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
En SQL Server, la división directa de dos enteros devuelve un entero incluso si el resultado debe ser el flotante. Hay un ejemplo a continuación para transmitirlo:
--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
Solo el último bloque devolverá el 3,14285714285714. A pesar del segundo bloque definido con la precisión correcta, el resultado será 3.00000.