如何在SQL中将指数和系数转换为整数值

如何在SQL中将指数和系数转换为整数值,sql,sql-server,math,scientific-notation,Sql,Sql Server,Math,Scientific Notation,****更新**** 如何将指数和系数转换为整数?SQL中是否有内置方法 这是科学记数法中的值61057747657e+011我想是这样的,但要变成一个整数,我想使用biginger?让我再研究一下 try { Console.WriteLine(Double.Parse("6.1057747657e+011")); } catch (OverflowException) { Console.WriteLine("{0} is outside th

****更新****

如何将指数和系数转换为整数?SQL中是否有内置方法


这是科学记数法中的值
61057747657e+011

我想是这样的,但要变成一个整数,我想使用biginger?让我再研究一下

   try {
      Console.WriteLine(Double.Parse("6.1057747657e+011"));
   }   
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }
下面是不同的答案

“e”或“e”字符,表示该值为 用指数(科学)符号表示。值参数 如果样式中包含 NumberStyles.AllowExponent标志

在你的情况下,你可以这样做

BigInteger value = System.Numerics.BigInteger.Parse("6.1057747657e+011", NumberStyles.Float, CultureInfo.InvariantCulture);
您必须具有
.NET Framework 4.5
或更高版本才能使其正常工作

DECLARE @s VARCHAR(25);
DECLARE @i BIGINT;

SET @s = '6.1057747657e+011';
SET @i = CAST(@s as FLOAT(53));

SELECT @i;
结果610577476570

您需要将结果存储为BIGINT,因为该数字对于32位INT来说太大。请注意,正在进行从FLOAT(53)到BIGINT的隐式转换

如果要控制舍入,可以使用ROUND()、FLOOR()或天花()函数。例如:

SET @i = ROUND(CAST(@s as FLOAT(53)), -2);
如果输入字符串可能包含无效数字,则需要添加错误处理

DECLARE @s VARCHAR(25);
DECLARE @i BIGINT;

SET @s = 'rubbish';

BEGIN TRY
    SET @i = CAST(@s as FLOAT(53));
    SELECT @i;
END TRY
BEGIN CATCH
    -- error handling goes here
END CATCH

(在SQL Server 2012上使用T-SQL进行测试。)

您有两个整数吗?指数和系数?这是什么意思?整数没有表示法。在将其转换为字符串时,可以使用特定的表示法对其进行格式化,或者在写入整数文本或将字符串解析为整数时,可以使用特定的表示法。你想干什么?这不是解决办法。
DECLARE @s VARCHAR(25);
DECLARE @i BIGINT;

SET @s = 'rubbish';

BEGIN TRY
    SET @i = CAST(@s as FLOAT(53));
    SELECT @i;
END TRY
BEGIN CATCH
    -- error handling goes here
END CATCH