没有科学记数法的Sql转换为浮动

时间:2013-10-23 20:26:00

标签: sql sql-server

如何在不使用科学记数法得到结果的情况下将十进制值转换为float?

例如,如果我的值为0.000050作为小数,当我将其转换为浮点数时,我得到5E-05

我希望看到0.00005

2 个答案:

答案 0 :(得分:9)

这与转换为float无关。它与转换为文本有关。您需要查看str()函数:

str( float_expression , total-width , number-of-decimal-places )

,其中

  • float-expression 表示您认为的含义,
  • 总宽度是所需的总字段宽度,包括符号,小数位等。
  • 小数位数是显示的小数位数(0-16)。如果指定的值超过16,则格式化的值将在16位小数处截断(不舍入)。

在您的情况下,例如:

declare @value float = 0.000050
select str(@value,12,6)

应该做你。

编辑注意:str()函数不会以科学记数法显示任何内容。如果问题是你想要从十进制值中修剪尾随零,你可以做两件事:

  • 使用format()函数(仅限SQL Server 2012):

    declare @x decimal(18,6) = 123.010000
    select @x                        as x1 ,
           format(@x,'#,##0.######') as x2 , -- all trailing zeroes trimmed
           format(@x,'#,##0.000###') as x3   -- min of 3, max of 6 decimal places shown
    
  • 使用replace()trim()。适用于任何版本的SQL Server。

    declare @x decimal(18,6) = 123.010000
    select @x as x1 ,
           replace( rtrim(replace(convert(varchar(32),@x),'0',' ')) , ' ' , '0' )
    

答案 1 :(得分:0)

ALTER FUNCTION [dbo].[fnExpStringToDecimal]
(
     @Number AS varchar(50)
) Returns Decimal(18,7)
BEGIN 
RETURN (SELECT IIF(CHARINDEX ('E', @Number)> 0,CAST(SUBSTRING(@Number, 1, CHARINDEX ('E', @Number)-1)AS DECIMAL(18,7)) * POWER( 10.0000000,CAST(SUBSTRING(@Number, CHARINDEX ('E', @Number)+1, LEN(@Number)) AS DECIMAL(18,7))), @Number))
END