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
declarar una o ambas variables como flotante / doble
lanzar una o ambas variables para flotar / duplicar.
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.
Gracias hombre. Su código me ayudó a responder a este: stackoverflow.com/questions/20532187/… ¿Puede decirme cómo truncar los ceros adicionales causados por esa multiplicación? Gracias.
Trojan.ZBOT
2
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
Hum ok, lo entiendo ahora, pero los dos números que quiero dividir son variables, y no parece funcionar si el .0000 no está especificado en la variable.
Roch
así que necesitas lanzar tanto @ set1 como @ set2 para flotar :)
anishMarokey
1
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:
Respuestas:
Declare set1 y set2 como flotantes en lugar de enteros o conviértalos en flotantes como parte del cálculo:
SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
fuente
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.
fuente
Porque es un número entero. Debe declararlos como números de punto flotante o decimales, o convertirlos en tales en el cálculo.
fuente
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
fuente
si lo declara como flotante o cualquier formato decimal, se mostrará
solamente
P.ej :
declare @weight float; SET @weight= 47 / 638; PRINT @weight
Salida: 0
Si quieres la salida como
P.ej
declare @weight float; SET @weight= 47.000000000 / 638.000000000; PRINT @weight
fuente
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.
fuente