Smart CONVERT float to VARCHAR in T-SQL

Smart CONVERT float to VARCHAR in T-SQL

我有以下代码

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) 时 returns 213456789.55 而不是 213456790

我该如何解决?

编辑

将 @m 声明为 Decimal 如下 DECLARE @m DECIMAL(18,2)=213456789.55 解决了问题,但我想知道是否有使用 float 的其他解决方案。谢谢

您可以使用 STR instead of 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服务器 2008)

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

CONVERT 始终对 float 类型使用科学记数法。

试试这个:

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