0

次のコードがあります

DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,@m,1)+')'
EXEC(@sql)

しかし、結果は213456790代わりに213456789.55

CONVERT(VARCHAR,213456789.55,1)私がそれを書き込もうとすると、そうでは213456789.55ありません213456790

これを解決するにはどうすればよいですか?

編集

次のように @m を Decimal として宣言するとDECLARE @m DECIMAL(18,2)=213456789.55問題は解決しましたが、float を使用する別の解決策があるかどうかを知りたいです。ありがとう

4

2 に答える 2

0

STRの代わりに使用できますCONVERTSTR小数点以下の桁数を指定できます。

DECLARE @m FLOAT=213456789.55;
SELECT 
@m AS [Float]
,CONVERT(VARCHAR(100),@m,0) AS Convert0
,CONVERT(VARCHAR(100),@m,1) AS Convert1
,CONVERT(VARCHAR(100),@m,2) AS Convert2
,LTRIM(STR(@m, 20, 2)) AS [Str]

結果(SQL Server 2008)

+--------------+--------------+----------------+------------------------+--------------+
|    Float     |   Convert0   |    Convert1    |        Convert2        |     Str      |
+--------------+--------------+----------------+------------------------+--------------+
| 213456789.55 | 2.13457e+008 | 2.1345679e+008 | 2.134567895500000e+008 | 213456789.55 |
+--------------+--------------+----------------+------------------------+--------------+

CONVERT型には常に科学表記法を使用しfloatます。

于 2016-02-18T12:05:39.560 に答える
0

これを試して:

DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,CAST(@m AS MONEY),1)+')'
EXEC(@sql)
于 2016-02-18T15:42:12.377 に答える