Berikut adalah kode yang saya gunakan dalam contoh:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
Inilah hasilnya:
47
638
0
Saya ingin tahu mengapa itu kembali, 0bukan0,073667712
Jawaban:
Jika Anda hanya menggunakan bilangan bulat dalam sebuah divisi, Anda akan mendapatkan pembagian bilangan bulat. Saat Anda menggunakan (setidaknya satu) double atau float, Anda akan mendapatkan pembagian floating point (dan jawaban yang ingin Anda dapatkan).
Jadi kamu bisa
Jangan hanya mengubah hasil pembagian bilangan bulat menjadi dua kali lipat: pembagian sudah dilakukan sebagai pembagian bilangan bulat, jadi angka di belakang desimal sudah hilang.
Karena itu bilangan bulat. Anda perlu mendeklarasikannya sebagai angka atau desimal floating point, atau memasukkannya ke dalam perhitungan.
Cukup gandakan bagian bawah pembagian dengan 1,0 (atau tempat desimal sebanyak yang Anda inginkan)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
jika Anda mendeklarasikannya sebagai float atau format desimal apa pun, itu akan ditampilkan
0
hanya
Misal:
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Keluaran: 0
Jika Anda menginginkan keluaran sebagai
0,073667712
Misalnya
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
Dalam SQL Server divisi langsung dari dua integer mengembalikan integer bahkan jika hasilnya harus float. Ada contoh di bawah ini untuk menyampaikannya:
--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
Hanya blok terakhir akan mengembalikan 3,14285714285714. Meskipun blok kedua ditentukan dengan presisi yang tepat, hasilnya akan menjadi 3.00000.