SQL Server 2005:str(4.65,5,1)= 4.7,str(3.65,5,1)= 3.6?

M.K*_*ran 11 sql sql-server sql-server-2005

在SQL Server 2005中,str()在舍入时对某些浮点值的行为很奇怪.在网上搜索时,我在那里找到了下面的代码和解释.

select STR(4.65,5,1) -- it will give 4.7
select STR(3.65,5,1) -- it will give 3.6
Run Code Online (Sandbox Code Playgroud)

我在这里这里得到了一些解释,但没有从那里得到任何东西(上面的T-SQL取自其中一个解释链接)

谁能解释为什么它会像这样?

Kaf*_*Kaf 5

STR()的语法; STR ( float_expression [ , length [ , decimal ] ] )清楚地说这个数字是一个float_expression.因此,无论您给出的数字是多少,都将首先转换为FLOAT(n)默认值n = 53.

所以

SELECT STR(4.65,5,1), SELECT STR(3.65,5,1)  
Run Code Online (Sandbox Code Playgroud)

等于:

SELECT STR(CAST(4.65 AS FLOAT(53)),5,1) , STR(CAST(3.65 AS FLOAT(53)),5,1)
Run Code Online (Sandbox Code Playgroud)

如果指定n,比如n = 4,它将给出你期望的答案(即4.7和3.7)

SELECT STR(CAST(4.65 AS FLOAT(4)),5,1) , STR(CAST(3.65 AS FLOAT(4)),5,1)
              --4.7,                     3.7
Run Code Online (Sandbox Code Playgroud)