Kiedy używasz tylko liczb całkowitych w dzieleniu, otrzymasz dzielenie całkowite. Kiedy użyjesz (przynajmniej jednej) liczby podwójnej lub zmiennoprzecinkowej, otrzymasz dzielenie zmiennoprzecinkowe (i odpowiedź, którą chcesz uzyskać).
Więc możesz
zadeklaruj jedną lub obie zmienne jako zmiennoprzecinkowe / podwójne
rzut jednej lub obu zmiennych na float / double.
Nie rzutuj wyniku dzielenia liczb całkowitych na podwojenie: dzielenie zostało już wykonane jako dzielenie całkowite, więc liczby znajdujące się za ułamkiem dziesiętnym są już utracone.
Dzięki stary. Twój kod pomógł mi odpowiedzieć na to pytanie - stackoverflow.com/questions/20532187/… Czy możesz mi powiedzieć, jak skrócić dodatkowe zera spowodowane tym mnożeniem? Dzięki.
Trojan.ZBOT,
2
jeśli zadeklarujesz go jako zmiennoprzecinkowy lub dowolny format dziesiętny, zostanie wyświetlony
0
tylko
Np .:
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Wyjście: 0
Jeśli chcesz, aby dane wyjściowe były w formacie
0,073667712
Na przykład
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
Hum ok Rozumiem, ale dwie liczby, które chcę podzielić, są zmiennymi i wydaje się, że nie działa, jeśli wartość .0000 nie jest określona w zmiennej.
Roch
więc musisz rzucić zarówno @ set1, jak i @ set2 na float :)
anishMarokey
1
W SQL Server bezpośredni podział dwóch liczb całkowitych zwraca liczbę całkowitą, nawet jeśli wynikiem powinna być liczba zmiennoprzecinkowa. Poniżej znajduje się przykład, aby to przekazać:
Odpowiedzi:
Zadeklaruj zbiór1 i zestaw2 jako liczby zmiennoprzecinkowe zamiast liczb całkowitych lub rzuć je na liczby zmiennoprzecinkowe jako część obliczeń:
SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
źródło
Kiedy używasz tylko liczb całkowitych w dzieleniu, otrzymasz dzielenie całkowite. Kiedy użyjesz (przynajmniej jednej) liczby podwójnej lub zmiennoprzecinkowej, otrzymasz dzielenie zmiennoprzecinkowe (i odpowiedź, którą chcesz uzyskać).
Więc możesz
Nie rzutuj wyniku dzielenia liczb całkowitych na podwojenie: dzielenie zostało już wykonane jako dzielenie całkowite, więc liczby znajdujące się za ułamkiem dziesiętnym są już utracone.
źródło
Ponieważ jest to liczba całkowita. Musisz zadeklarować je jako liczby zmiennoprzecinkowe lub dziesiętne lub rzutować na takie w obliczeniach.
źródło
Po prostu pomnóż dolną część podziału przez 1,0 (lub tyle miejsc po przecinku, ile chcesz)
PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2 *1.00000; PRINT @weight
źródło
jeśli zadeklarujesz go jako zmiennoprzecinkowy lub dowolny format dziesiętny, zostanie wyświetlony
tylko
Np .:
declare @weight float; SET @weight= 47 / 638; PRINT @weight
Wyjście: 0
Jeśli chcesz, aby dane wyjściowe były w formacie
Na przykład
declare @weight float; SET @weight= 47.000000000 / 638.000000000; PRINT @weight
źródło
W SQL Server bezpośredni podział dwóch liczb całkowitych zwraca liczbę całkowitą, nawet jeśli wynikiem powinna być liczba zmiennoprzecinkowa. Poniżej znajduje się przykład, aby to przekazać:
--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 odpowiednią precyzją wynik wyniesie 3,00000.
źródło