2011-03-01 66 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)