2011-03-01 51 views
1

我有一个表:获取正确数量的SQL Server

id  Number 
-------------------- 
1 61326085092 
2 161569087548 
3 169193968080 
4 208082024640 
5 230160816344 
6 218557943068 

我声明浮点型变量:

DECLARE @varible AS FLOAT 

当我设置一个变量与描述的查询表中的结果:

SELECT @variable = Number FROM @TableR where ID = 1; 

我越来越: 变量:6.13261e + 010

所以这是烦人,因为就像我跟大值计算,我失去了一些数字... 如何获取结果,因为它是61326085092,不6.13261e+010 难道这是一个varchar浮动皈依错误?

因此,例如:

DECLARE @var AS FLOAT 
set @var = 6.13261e+010 * 6.13261e+010 
PRINT LTRIM(STR(@var,32,15)) 

set @var = 61326085092 * 61326085092 
PRINT LTRIM(STR(@var,32,15)) 

结果:

3760890541210000200000.000000000 
3760888712711224400000.000000000 

非常不同......

回答

1

你试过指定精度,例如:see here

SELECT CONVERT(varchar(100), CAST(@testFloat AS decimal(38,2))) 

SELECT STR(@testFloat, 38, 2) 
+0

但是,如果我想将选择结果赋值给float var – cMinor 2011-03-01 05:36:32

+1

如果您发布代码,XML或数据样本,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码样本”按钮(“{}”)以精确地格式化和语法突出显示它! – 2011-03-01 05:39:58

+1

@marc_s thxs,将来会做:) – 2011-03-01 23:17:36

0

你有使用BigInt有?顺便说一句,你的'数字'字段的数据类型是什么?

+0

的数据类型为FLOAT,我使用的浮动,因为以后我会用一些开方和POW ... – cMinor 2011-03-01 05:32:01

0

你在用什么来显示查询结果?在我看来,结果集本身正确地返回一个浮点数,但无论格式化/显示结果都将其转换为科学记数法 - 您应该使用什么方法来避免这取决于您使用的是什么(例如C#?)

+0

我已经发布了一个例子,做乘法或者一些数字的平方根时,错误出现之后的'DECLARE @变种AS FLOAT 组@var = 6.13261e + 010 * 6.13261e + 010 PRINT LTRIM(STR(@ VAR,32,15)) 组@var = 61326085092 * 61326085092 PRINT LTRIM(STR(@ VAR,32 ,15))''产生的'3760890541210000200000.000000000 3760888712711224400000.000000000' – cMinor 2011-03-01 05:34:13

0

你没有失去数,而所显示数量的软件在缩短版格式化。你在使用查询分析器吗?如果你想强制它显示所有的数字,那么你应该把它转换成一个字符串。

DECLARE @varible AS FLOAT 
SELECT @variable = Number FROM @TableR where ID = 1; 
print cast(@variable as varchar)