11

SQL Server 2005 ではstr()、丸め中にいくつかの float 値で奇妙な動作をします。ネットで検索しているときに、以下のコードと説明が見つかりました。

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

ここここでいくつかの説明がありましたが、そこから何も得られませんでした(上記の T-SQL は、説明リンクの 1 つから取得されました)。

なぜこのように動作するのか、誰か説明してもらえますか?

4

1 に答える 1

5

STR()の構文; STR ( float_expression [ , length [ , decimal ] ] )番号が a であることを明確に示していfloat_expressionます。したがって、指定した数値は最初にFLOAT(n)where デフォルト値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 に答える