2013-06-05 57 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