[英]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)
它將返回213456789.55
而不是213456790
我該如何解決?
編輯
將DECLARE @m DECIMAL(18,2)=213456789.55
聲明為Decimal就像下面的DECLARE @m DECIMAL(18,2)=213456789.55
解決了此問題,但我想知道是否還有另一種使用float的解決方案。 謝謝
您可以使用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 |
+--------------+--------------+----------------+------------------------+--------------+
對於float
類型, CONVERT
始終使用科學計數法。
嘗試這個:
DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,CAST(@m AS MONEY),1)+')'
EXEC(@sql)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.