为什么我必须将float转换为小数,然后将小数转换为varchar?

时间:2016-02-03 11:35:32

标签: sql sql-server

请参阅下面的DDL:

create table #TestFloat (id int, floattest float)
insert into #TestFloat values (1,65478)
insert into #TestFloat values (1,65478888)
insert into #TestFloat values (1,42)

如何将浮点值转换为varchar?我试过这个:

select top 1 cast(floattest as varchar(15)) from #TestFloat

产生这个:

6.54789e+007

和此:

select top 1 id,Str(floattest, 15, 0) from #TestFloat

'          65478'

我在上面添加了引号,以证明它已被转换为char。

这有效(取自这个问题:How to convert Float to Varchar in SQL):

select CAST(CAST(floattest AS DECIMAL(20)) AS VARCHAR(20)) from #TestFloat

为什么我必须先输入小数?

3 个答案:

答案 0 :(得分:1)

怎么样

SELECT FORMAT(floattest,'R') FROM #TestFloat

(或'G''N',具体取决于您的使用情况) https://msdn.microsoft.com/library/dwhawy9k.aspx

SELECT LTRIM(STR(floattest,8,0)) FROM #TestFloat

(选择你的精度和比例以适应但注意四舍五入) https://msdn.microsoft.com/en-AU/library/ms189527.aspx

你也会问"为什么"?您可能应该从这里开始阅读SQL Server类型的MSDN页面:https://msdn.microsoft.com/en-AU/library/ms187752.aspx和此答案Difference between numeric, float and decimal in SQL Server

答案 1 :(得分:0)

您可以在sql server中使用convert函数

select top 1 CONVERT (NVARCHAR(15),floattest) from #TestFloat

答案 2 :(得分:0)

首先转换为十进制,然后转换为varchar。

<强>查询

SELECT CAST
       (
           CAST(floattest AS DECIMAL(25,0)) 
           AS VARCHAR(MAX)
       ) 
FROM #TestFloat;

SQL Fiddle demo