**** ****修订
如何将指数和系数转换为整数? SQL中是否有内置方法?
这是科学记数法6,1057747657e+011
答案 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
或更高才能使其正常工作。