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

时间:2014-05-15 11:57:44

标签: sql sql-server math scientific-notation

**** ****修订

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

这是科学记数法6,1057747657e+011

中的值

2 个答案:

答案 0 :(得分:3)

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()或CEILING()函数。例如:

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测试。)

答案 1 :(得分:0)

我想这样但是要使用整数我想使用BigInteger?让我研究更多

   try {
      Console.WriteLine(Double.Parse("6.1057747657e+011"));
   }   
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }

以下不同答案。

http://msdn.microsoft.com/en-us/library/dd268285(v=vs.110).aspx

  

" e"或" E" character,表示该值为   用指数(科学)表示法表示。值参数   如果样式包含,则可以用指数表示法表示数字   NumberStyles.AllowExponent标志。

BigInteger value = BigInteger.Parse("-903145792771643190182");
string[] specifiers = { "C", "D", "D25", "E", "E4", "e8", "F0", 
                        "G", "N0", "P", "R", "X", "0,0.000", 
                        "#,#.00#;(#,#.00#)" };

foreach (string specifier in specifiers)
   Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));

// The example displays the following output: 
//       C: ($903,145,792,771,643,190,182.00) 
//       D: -903145792771643190182 
//       D25: -0000903145792771643190182 
//       E: -9.031458E+020 
//       E4: -9.0315E+020 
//       e8: -9.03145793e+020 
//       F0: -903145792771643190182 
//       G: -903145792771643190182 
//       N0: -903,145,792,771,643,190,182 
//       P: -90,314,579,277,164,319,018,200.00 % 
//       R: -903145792771643190182 
//       X: CF0A55968BB1A7545A 
//       0,0.000: -903,145,792,771,643,190,182.000 
//       #,#.00#;(#,#.00#): (903,145,792,771,643,190,182.00)     

在你的情况下你可以做

BigInteger value = System.Numerics.BigInteger.Parse("6.1057747657e+011", NumberStyles.Float, CultureInfo.InvariantCulture);

您必须.NET Framework 4.5或更高才能使其正常工作。