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

时间:2012-11-27 13:29:37

标签: 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

我得到了一些解释herehere,但没有得到任何内容(上面的T-SQL取自其中一个解释链接)

有人可以解释为什么它会像这样吗?

1 个答案:

答案 0 :(得分: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)  

等于:

SELECT STR(CAST(4.65 AS FLOAT(53)),5,1) , STR(CAST(3.65 AS FLOAT(53)),5,1)

如果您指定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