如何在 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 中将指数和系数转换为整数值的主要内容,如果未能解决你的问题,请参考以下文章