Смарт КОНВЕРТ поплавок в VARCHAR в 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
Как мне это решить?
редактирует
Объявление @m как десятичное, как в следующем DECLARE @m DECIMAL(18,2)=213456789.55
решил проблему, но я хочу знать, есть ли другое решение для использования float. Спасибо
2 ответа
Решение
Ты можешь использовать 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
типы.
Попробуй это:
DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,CAST(@m AS MONEY),1)+')'
EXEC(@sql)