Oto kod używam na przykład:SQL Server, podział zwraca zero
PRINT @set1
PRINT @set2
SET @weight= @set1/@set2;
PRINT @weight
Oto wynik:
47
638
0
Chciałbym wiedzieć, dlaczego to powrót 0
zamiast z 0,073667712
Oto kod używam na przykład:SQL Server, podział zwraca zero
PRINT @set1
PRINT @set2
SET @weight= @set1/@set2;
PRINT @weight
Oto wynik:
47
638
0
Chciałbym wiedzieć, dlaczego to powrót 0
zamiast z 0,073667712
Obaj deklarują set1 i set2 jako pływaki zamiast liczb całkowitych lub rzucać je na pływaków jako część obliczeń:
SET @weight= CAST(@set1 AS float)/CAST(@set2 AS float);
Ponieważ jest to liczba całkowita. Musisz zadeklarować je jako liczby zmiennoprzecinkowe lub dziesiętne lub odrzucić w obliczeniach.
Jeśli zmienię zmienną @weight na float, czy to wystarczy? – Roch
jeśli zadeklarować ją jako pływaka lub dowolnym formacie dziesiętnym wyświetli
tylko
Np:
declare @weight float;
SET @weight= 47/638; PRINT @weight
wyjściowa: 0
Jeśli chcesz wyjście jako
0,073667712
Eg
declare @weight float;
SET @weight= 47.000000000/638.000000000; PRINT @weight
Hum w porządku Otrzymuję go teraz, ale dwie liczby, które chcę podzielić, są zmienne i wydaje się, że nie działa, jeśli nie podano zmiennej .0000. – Roch
, więc musisz rzucić zarówno @ set1, jak i @ set2, aby unosić :) – anishMarokey
Gdy używasz tylko liczb całkowitych w div ision, otrzymasz podział liczb całkowitych. Kiedy użyjesz (przynajmniej jeden) double lub float, otrzymasz dzielenie zmiennoprzecinkowe (i odpowiedź, którą chcesz uzyskać).
Więc można
Nie rzucaj wyniku podziału liczb całkowitych na podwójne: podział został już wykonany jako podział całkowity, więc liczby za ukośnikiem dziesiętnym są już utracone.
+1, ponieważ myślę, że wyjaśniłeś to trochę lepiej i wspomniałeś, że tylko jedna z wartości musi być float/double – Chaulky
Wystarczy mutiply dno podziału przez 1.0 (lub tyle miejsc po przecinku, ile chcesz)
PRINT @set1
PRINT @set2
SET @weight= @set1/@set2 *1.00000;
PRINT @weight
Dzięki człowieku. Twój kod pomógł mi odpowiedzieć na to - http://stackoverflow.com/questions/20532187/how-to-calculate-percent-of-total-within-group-by-statement Czy możesz mi powiedzieć, jak skrócić dodatkowe zera spowodowane przez to mnożenie? Dzięki. –
w SQL Server bezpośredniego dzielenia dwóch liczb całkowitych zwrotów całkowitych nawet jeśli wynik powinien być pływak. Poniżej znajduje się przykład:
--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
Tylko ostatni blok zwróci 3,14285714285714. Pomimo drugiego bloku zdefiniowanego z właściwą precyzją wynik wyniesie 3,00000.
Jaki jest typ danych @ weight? –
to jest "int": DECLARE @weight INT – Roch