在 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 取自解释链接之一)
谁能解释为什么它会这样?
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