Смарт КОНВЕРТ поплавок в 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)
Другие вопросы по тегам