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

Posted

技术标签:

【中文标题】如何在 SQL 中将指数和系数转换为整数值【英文标题】:How to convert exponent and coefficient to an integer value in SQL 【发布时间】:2014-05-15 11:57:44 【问题描述】:

****更新****

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

这是科学计数法中的值6,1057747657e+011

【问题讨论】:

你有两个整数吗?指数和系数? 你这是什么意思?整数没有符号。将其转换为字符串时使用特定符号对其进行格式化,或者在编写整数文字或将字符串解析为整数时使用特定符号。你想做什么? 【参考方案1】:
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 测试。)

【讨论】:

【参考方案2】:

我是这样想的,但要变成一个整数,我猜要使用 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”字符,表示值是 以指数(科学)符号表示。值参数 如果 style 包括 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 或更高版本才能使用此功能。

【讨论】:

这不是解决方案。

以上是关于如何在 SQL 中将指数和系数转换为整数值的主要内容,如果未能解决你的问题,请参考以下文章

如何将时间戳日期转换为整数值

如何在读取 CSV 文件时将字符串值转换为整数值?

如何将整数位数组转换为整数值?

如何在sql中将数字转换为日期

如何在 Python 中将负指数数转换为十进制数?

从数字到varchar的CAST返回指数值? [复制]