2013-06-05 52 views
2

我正在SQL Server上的原有精度2012我從浮點數轉換爲varchar

我有2個表:

Create table tbl1 (formula varchar(50)) 

Insert into tbl1 values ('A-B') 


Create table tbl2 (A float(53), B float(53)) 

Insert into tbl2 values (12.2466654, 11.7543289) 

我想要得到的結果作爲變量@result

Declare @result varchar(250); 
Declare @a varchar(50); 
Declare @b varchar(50); 

Select @a = a from tbl2; 
Select @b = b from tbl2; 

Set @result = replace(tbl1, 'A', Cast(@A as float(53)); 
Set @result = replace(tbl1, 'B', Cast(@B as float(53)); 

當我從@result中選擇時,我得到類似12.2-11.8的東西,所以它幾乎是好的,但我失去了精度。

也許你有一個想法如何正確地編寫查詢?

回答

6

有沒有理由不能使用Decimal而不是float?漂浮物有精度損失的可能性。

當轉換爲VARCHAR()時,嘗試使用STR()而不是CAST()。這來自於轉換浮動和http://msdn.microsoft.com/en-us/library/ms173773.aspx

DECLARE @result varchar(250); 

SELECT @result = STR(tbl2.A, 10,8) + '-' + STR(tbl2.B, 10,8) 
    FROM tbl2; 

PRINT @result; 

這導致字符串「12.2466654-11.7543289」我在讀取數據。

+0

Wel我想在這種情況下,我可以用十進制格式的列創建中間表並從那裏導入tbl2中的所有數據。然後使用新表 – Almazini

+0

中的數據處理您是否正在查找tbl1中的值爲0.4923365或字符串'12 .2466654-11.7543289'。如果它只是字符串,那麼使用STR()應該可以解決問題[STR(tbl2.A,10,8)+' - '+ STR(tbl2.B,10,8)]。如果您希望獲得0.4923365,則需要考慮float數據類型的精度損失。爲了演示精度的不足,當我[CAST(12.2466654 as float) - CAST(11.7543289 as float)]時,我在SQL Server 2012實例上返回0.492336499999999。 –

+0

我需要將它表示爲一個字符串!明天將嘗試Str()!感謝您的幫助 – Almazini