【问题标题】:Sql cast to float without scientific notationSql 强制转换为没有科学计数法的浮点数
【发布时间】:2013-10-23 20:26:00
【问题描述】:

如何将十进制值转换为浮点数而不以科学计数法获得结果?

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

我想见0.00005

【问题讨论】:

  • 哪种风格的 SQL?这是给甲骨文的吗? DB2? SQL 服务器? MySQL?后格雷斯?完全不同的东西?这些东西是高度特定于供应商的 - 请通过相应地更新您的问题的标签来告诉我们您正在使用的具体数据库!
  • @Amirreza Keshavarz Real 与浮动效果相同。

标签: sql sql-server


【解决方案1】:

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

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

在哪里

  • float-expression 表示你认为的意思,
  • total-width 是所需的总字段宽度,包括符号、小数位等。
  • number-of-decimal-places 是显示的小数位数 (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' )
    

【讨论】:

  • 让我试着更清楚一点。该列是数据类型 Decimal(18,6)。当我选择它时,我将它转换为浮动,以截断额外的零。我的问题是它以科学计数法返回。您还有其他方法吗?
  • @Jill -- 看看我修改后的答案。
  • replace()/trim() 解决方案对我有用!感谢您的帮助!
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    我知道这不是正确的答案,但如果您正在搜索从 VARCHAR 科学记数法到 DECIMAL 的转换并像我一样登陆这里,您可以在 SQL SERVER 上执行以下操作:

    SELECT CAST('4.51432543543E-4' AS FLOAT)
    

    (在 2012 年以上测试)

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 2014-09-25
      • 2014-07-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多