Örnekte kullandığım kod şu:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
İşte sonuç:
47
638
0
Bunun 0yerine neden geri döndüğünü bilmek isterim0,073667712
Yanıtlar:
Bir bölmede yalnızca tamsayı kullandığınızda, tamsayı bölme elde edersiniz. (En az bir) double veya float kullandığınızda, kayan nokta bölme (ve almak istediğiniz cevabı) elde edeceksiniz.
Böylece yapabilirsiniz
Tamsayı bölmesinin sonucunu ikiye katlamayın: Bölme zaten tamsayı bölümü olarak yapıldı, bu nedenle ondalık sayıların arkasındaki sayılar zaten kayboldu.
Çünkü bu bir tamsayı. Bunları kayan nokta sayıları veya ondalık sayılar olarak tanımlamanız veya hesaplamada buna çevirmeniz gerekir.
Bölmenin altını 1.0 (veya istediğiniz kadar ondalık basamak) ile çarpın.
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
float veya herhangi bir ondalık format olarak bildirirseniz,
0
bir tek
Örneğin :
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Çıkış: 0
Çıktı olarak istiyorsanız
0,073667712
Örneğin
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
SQL Server'da iki tamsayının doğrudan bölümü, sonuç kayan nokta olsa bile tamsayı döndürür. Bunu geçmek için aşağıda bir örnek var:
--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
Sadece son blok 3,14285714285714'ü döndürecektir. Doğru hassasiyetle tanımlanan ikinci bloğa rağmen sonuç 3.00000 olacaktır.