SQL Server将科学记数法(指数表示法)字符串转换为数字

时间:2016-08-18 09:22:59

标签: sql-server tsql sql-server-2012

我想了解以下T-SQL语句:

DECLARE @s NVARCHAR(16) = N'1.377532E-39';
SELECT  @s AS [orig]
  , CONVERT(REAL, @s) AS [real]
  , CONVERT(FLOAT, @s) AS [float]
  -- , CONVERT(NUMERIC(2, 0), @s) AS [numeric direct] 
    /* does not work: Msg 8114, Level 16, State 5 */
  , CONVERT(NUMERIC(2, 0), CONVERT(FLOAT, @s)) AS [numeric via float];

我想要的输出是精度为NUMERIC(2,0)的值(在本例中为0)。直接转换不起作用;我必须先从NVARCHAR转换为FLOAT,然后再从FLOAT转换为NUMERIC(2,0)

如果字符串不包含科学记数字,则直接转换有效。我想了解为什么?谢谢你的提示。

1 个答案:

答案 0 :(得分:3)

据我所知,这只是Float datatype能够将表示科学记数法的字符串转换为数字,而Numeric datatype则不能。一旦Float将科学记数法中的数字转换为数字(而不是代表数字的字符串),则数字可以处理转换。

FloatNumeric数据类型的文档中,两者都使用科学记数法,但这是为了定义数据类型接受的最小值和最大值。在Float文档中,声明:

Conversion of float values that use scientific notation to decimal or
numeric is restricted to values of precision 17 digits only. Any value 
with precision higher than 17 rounds to zero.

这表明Float可以解释科学记数法,而Decimal和Numeric数据类型只能处理最大精度为17的数字,这是由使用科学记数法指定的数字产生的。

我希望这是有道理的。如果您有任何问题,请发表评论。

相关问题