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

Alm*_*ini 2 sql-server variables precision varchar

我正在使用Sql Server 2012.

我有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)
Run Code Online (Sandbox Code Playgroud)

我试图将结果变为变量@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));
Run Code Online (Sandbox Code Playgroud)

当我选择从中@result得到类似的东西时12.2-11.8,它几乎是好的,但我正在失去精确度.

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

Dre*_*man 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;
Run Code Online (Sandbox Code Playgroud)

这导致我的字符串"12.2466654-11.7543289".