Dari dokumentasi online :
POWER ( float_expression , y )
Argumen
float_expression Adalah ekspresi dari tipe float atau tipe yang secara implisit dapat dikonversi menjadi float
Implikasinya adalah bahwa apa pun yang Anda lewati sebagai parameter pertama akan secara implisit dilemparkan ke float(53)
sebelum fungsi dijalankan. Namun, ini bukan (selalu?) Kasusnya .
Jika itu masalahnya, itu akan menjelaskan hilangnya presisi:
Konversi nilai float yang menggunakan notasi ilmiah menjadi desimal atau numerik dibatasi hanya untuk nilai presisi 17 digit. Nilai apa pun dengan presisi lebih tinggi dari 17 putaran ke nol.
Di sisi lain, literalnya 2.
adalah tipe numeric
...:
DECLARE @foo sql_variant;
SELECT @foo = 2.;
SELECT SQL_VARIANT_PROPERTY(@foo, 'BaseType');
GO
| (Tidak ada nama kolom) |
| : --------------- |
| numerik |
Aku di sini
... dan operator multiply mengembalikan tipe data dari argumen dengan prioritas yang lebih tinggi .
Tampaknya pada 2016 (SP1), semua presisi dipertahankan:
SELECT @@version;
GO
| (Tidak ada nama kolom) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------- |
| Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) <br> 28 Okt 2016 18:17:30 <br> Hak cipta (c) Microsoft Corporation <br> Edisi Express (64-bit) pada Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600:) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
| (Tidak ada nama kolom) |
| : ------------------- |
| 18446744073709551616 |
Aku di sini
... tetapi pada 2014 (SP2), mereka bukan:
SELECT @@version;
GO
| (Tidak ada nama kolom) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ |
| Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) <br> 17 Juni 2016 19:14:09 <br> Hak cipta (c) Microsoft Corporation <br> Edisi Express (64-bit) pada Windows NT 6.3 <X64> (Build 9600:) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
| (Tidak ada nama kolom) |
| : ------------------- |
| 18446744073709552000 |
Aku di sini