Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从float转换为varchar时,我正在丢失精度_Sql Server_Variables_Precision_Varchar - Fatal编程技术网

Sql server 从float转换为varchar时,我正在丢失精度

Sql server 从float转换为varchar时,我正在丢失精度,sql-server,variables,precision,varchar,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);

我正在使用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的结果,因此它几乎不错,但精度正在下降


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

有什么原因不能使用十进制而不是浮点?浮动可能会导致精度损失

转换为VARCHAR()时,请尝试使用STR()而不是CAST()。这来自于转换浮点数和读取数据


这为我生成了字符串“12.24666654-11.7543289”。

Wel我认为在这种情况下,我可以创建包含十进制格式列的中间表,并从tbl2导入所有数据。然后处理新表中的数据您是否希望tbl1中的值为0.4923365或字符串“12.2466654-11.7543289”。如果只是字符串,那么使用STR()应该可以解决问题[STR(tbl2.A,10,8)+'-'+STR(tbl2.B,10,8)]。如果希望得到0.4923365,则需要考虑浮点数据类型的精度损失。为了证明精度的不足,当我执行[CAST(12.24666654作为浮点)-CAST(11.7543289作为浮点)]时,我在SQL Server 2012实例上返回了0.49233649999999。我需要将其表示为字符串!明天我会试试的!谢谢你的帮助
DECLARE @result varchar(250);

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

 PRINT @result;