Từ các tài liệu trực tuyến :
POWER ( float_expression , y )
Tranh luận
float_expression Là một biểu thức của kiểu float hoặc thuộc loại có thể được chuyển đổi hoàn toàn thành float
Hàm ý là bất cứ điều gì bạn vượt qua như tham số đầu tiên sẽ được chuyển hoàn toàn sang một float(53)
trước khi hàm được thực thi. Tuy nhiên, đây không phải là (luôn luôn?) Trường hợp .
Nếu đó là trường hợp, nó sẽ giải thích sự mất độ chính xác:
Việc chuyển đổi các giá trị float sử dụng ký hiệu khoa học thành số thập phân hoặc số chỉ được giới hạn ở các giá trị có độ chính xác 17 chữ số. Bất kỳ giá trị nào với độ chính xác cao hơn 17 vòng đến không.
Mặt khác, nghĩa đen 2.
là loại numeric
:
DECLARE @foo sql_variant;
SELECT @foo = 2.;
SELECT SQL_VARIANT_PROPERTY(@foo, 'BaseType');
GO
| (Không có tên cột) |
| : --------------- |
| số |
dbfiddle ở đây
Mạnh và toán tử nhân trả về kiểu dữ liệu của đối số có độ ưu tiên cao hơn .
Có vẻ như vào năm 2016 (SP1), tất cả độ chính xác được giữ lại:
SELECT @@version;
GO
| (Không có tên cột) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------- |
| Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) <br> 28 tháng 10 2016 18:17:30 <br> Bản quyền (c) Microsoft Corporation <br> Express Edition (64-bit) trên Windows Server Tiêu chuẩn 2012 R2 6.3 <X64> (Bản dựng 9600 :) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
| (Không có tên cột) |
| : ------------------- |
| 18446744073709551616 |
dbfiddle ở đây
Tuy nhiên, vào năm 2014 (SP2), họ không:
SELECT @@version;
GO
| (Không có tên cột) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ |
| Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) <br> 17 tháng 6 năm 2016 19:14:09 <br> Bản quyền (c) Microsoft Corporation <br> Express Edition (64-bit) trên Windows NT 6.3 <X64> (Bản dựng 9600 :) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
| (Không có tên cột) |
| : ------------------- |
| 18446744073709552000 |
dbfiddle ở đây