0

我有以下代码

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

但结果213456790213456789.55

当我尝试写CONVERT(VARCHAR,213456789.55,1)它然后返回213456789.55213456790

我该如何解决这个问题?

编辑

像下面这样将@m 声明为十进制DECLARE @m DECIMAL(18,2)=213456789.55解决了这个问题,但我想知道是否有另一种使用浮点数的解决方案。谢谢

4

2 回答 2

0

您可以使用STR而不是CONVERT. STR允许指定小数点右侧的小数位数。

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 回答