我在 TSQL 中除法时遇到问题。我已阅读Precision, scale, and length (Transact-SQL)页,但我仍然无法弄清楚为什么会出现以下问题:
PRINT 1.4259276982890801000000/0.4259276982890801000000
-- Result 3.347816317222208
DECLARE @VAR1 DECIMAL(30,22) = 1.4259276982890801000000
DECLARE @VAR2 DECIMAL(30,22) = 0.4259276982890801000000
PRINT @VAR1/@VAR2
-- Result 3.34781631
问题
- 那么为什么在这些情况下我会看到不同的精度,而数字却完全相同?
- 我该如何修复它?
最佳答案
第一个 PRINT
语句中文字的实际精度和小数位数为 decimal(23,22)
和 decimal(22,22)
。每the documentation ,结果类型为decimal(38,15)。您可以使用 sp_describe_first_result_set
观察这一点:
EXEC sp_describe_first_result_set N'SELECT 1.4259276982890801000000;';
EXEC sp_describe_first_result_set N'SELECT 0.4259276982890801000000;';
EXEC sp_describe_first_result_set N'SELECT 1.4259276982890801000000/0.4259276982890801000000;';
变量均为decimal(30,22)
,因此结果为decimal(38,8)
:
EXEC sp_describe_first_result_set N'
DECLARE @VAR1 DECIMAL(30,22) = 1.4259276982890801000000;
DECLARE @VAR2 DECIMAL(30,22) = 0.4259276982890801000000;
SELECT @VAR1/@VAR2;';
您可以通过指定不同的变量精度和小数位数来修复它:
DECLARE @VAR1 DECIMAL(23,22) = 1.4259276982890801000000;
DECLARE @VAR2 DECIMAL(22,22) = 0.4259276982890801000000;
SELECT @VAR1/@VAR2;
关于t-sql - TSQL除法时小数精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095972/