从float转换为varchar时,我失去了精度

时间:2013-06-05 18:08:33

标签: sql-server variables precision varchar

我正在使用Sql Server 2012。

我有两张桌子:

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这样的东西,所以它几乎是好的,但我正在失去精确度。

也许你知道如何正确编写查询?

1 个答案:

答案 0 :(得分: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”。