11

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

select STR(4.65,5,1) -- it will give 4.7
select STR(3.65,5,1) -- it will give 3.6

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

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

4

1 回答 1

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
于 2012-11-27T13:54:36.880 回答